首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java内存清理

Java内存清理
EN

Stack Overflow用户
提问于 2015-08-07 19:28:22
回答 3查看 12.1K关注 0票数 2

我们已经为我们的项目创建了自定义的测试自动化框架。这模拟了使用HTTP客户端的浏览器和服务器之间的交互(主要是GET和POST请求中的json双向数据流)。

这里很热,我们有大约1000个自动化的测试用例。测试用例的执行包括创建大量的消息,从而创建大量的字符串;重复读取大文件并验证内容,并在获得验证结果后抛出所有内容。它适用于所有的测试用例,需要15到20个小时。

问题是,我们遇到了OutOfMemory错误。有什么想法吗?;关于清理从100MB - 250MB的大文件读取和解析后消耗的内存。有许多拆分、替换、子串操作正在进行。

请问,有没有人能提供一些建议和建议?

提前使用-Thanks

EN

回答 3

Stack Overflow用户

发布于 2015-08-07 19:40:50

当由于内存空间不足而无法分配对象,并且垃圾收集器无法释放一些空间时,Java虚拟机(JVM)会抛出此错误。当禁用抑制和/r堆栈跟踪不可写时,OutOfMemoryError对象由JVM创建。

针对OutOfMemoryError的解决方案:JavaJava1.Java对此错误最明显的解决方案是增加虚拟机的可用内存大小。如果您的应用程序需要更多内存,则应将其授予您的应用程序。

2.验证您的应用程序没有存储不必要的信息。只存储和维护Java应用程序正确执行所需的那些信息。

3.您可以使用可用的内存分析器工具,以便仔细观察应用程序占用的内存部分。此类工具的示例有Eclipse Memory Analyzer(http://www.eclipse.org/mat/)和Java Heap Analysis Tool (jhat)(http://docs.oracle.com/javase/6/docs/technotes/tools/share/jhat.html)。

JVM 4.尝试配置您的使用更多的内存,如前面所示(-Xms750m -Xmx2048m -XX:MaxPermSize=1024m )。

5.启用垃圾收集日志记录(-Xloggc:/var/log/YOUR_APP/YOUR_APP-gc.log)并查看它的行为,堆是如何增长的。你可能有一个内存泄漏。

6.如果是这样的话,获取一个HeapDump,使用YourKit打开它,并查找使用最大内存量的对象。试着找出原因并解决它。

7.您可以使用以下命令调用垃圾收集器:

代码语言:javascript
复制
System.gc();

在调用垃圾收集器方法时,建议Java虚拟机努力回收未使用的对象,以便使它们当前占用的内存可用于快速重用。当控制从方法调用返回时,Java虚拟机已经尽了最大努力从所有被丢弃的对象中回收空间。

JVM决定何时执行它。通常,如果JVM将要抛出一个OutOfMemoryError,那么调用System.gc()并不能阻止它。最好调查一下为什么会泄漏这么多内存,并在此过程中将其清理干净。但这并不意味着它会立即执行。

有关如何使用JavaSE6调优垃圾收集的详细信息,请阅读有关JVM Garbage Collection Tuning SE 6 HotSpot的更多信息。

希望这能对你有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2015-08-07 19:41:12

通常,您应该确保最大化可用于垃圾回收的对象。要做到这一点,一种方法是在尽可能窄的范围内声明变量。(例如:在try块中,使用方法局部变量)

您可能还必须使用increase Java heap size

票数 1
EN

Stack Overflow用户

发布于 2015-08-07 19:41:59

您可以显式地将对象设置为null。

甚至你也可以调用System.gc();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31876629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档