Java内存清理

Java内存清理,java,memory-management,out-of-memory,Java,Memory Management,Out Of Memory,我们已经为我们的项目创建了自定义测试sutomation框架。这模仿了使用HTTP客户端的浏览器和服务器之间GET和POST请求中的双向数据流交互 这里很热,经常发生, 我们有大约1000个自动化测试用例。测试用例的执行涉及到创建成吨的消息和成吨的字符串;反复阅读大文件并验证内容,在得到验证结果后,将所有内容随意丢弃。它适用于所有测试用例,需要15到20个小时 问题是,我们陷入了OutOfMemory错误。有什么想法吗?;清理从100MB-250MB的大文件读取和解析后消耗的内存。有很多拆分、替

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

这里很热,经常发生, 我们有大约1000个自动化测试用例。测试用例的执行涉及到创建成吨的消息和成吨的字符串;反复阅读大文件并验证内容,在得到验证结果后,将所有内容随意丢弃。它适用于所有测试用例,需要15到20个小时

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

请问,有人能提供一些提示和建议吗


-提前感谢

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

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

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

三,。您可以使用可用的内存分析器工具仔细观察应用程序占用的内存部分。这些工具的例子有Eclipse内存分析器和Java堆分析工具jhat

四,。尝试将JVM配置为使用更多内存,如前所示-Xms750m-Xmx2048m-XX:MaxPermSize=1024m

五,。启用垃圾收集日志记录-Xloggc:/var/log/YOUR_-APP/YOUR_-APP-gc.log,并查看它的行为,堆是如何增长的。可能是内存泄漏

六,。如果是这样,请使用HeapDump,使用工具包打开它并查找使用最大内存量的对象。试着找出原因并解决它

七,。您可以使用以下命令调用垃圾收集器:

System.gc();
当调用垃圾收集器方法时,表明Java虚拟机花费精力回收未使用的对象,以便使它们当前占用的内存可用于快速重用。当控件从方法调用返回时,Java虚拟机已尽最大努力从所有丢弃的对象中回收空间

JVM决定何时执行它。通常,如果JVM即将抛出OutOfMemoryError,则调用System.gc不会阻止它。最好调查一下你为什么会泄漏这么多内存,并一路上把它清理干净。但这并不意味着它将立即执行

有关如何使用JavaSE6调优垃圾收集的详细信息,请阅读更多


希望这对您有所帮助。

一般来说,您应该确保最大化可用于垃圾收集的对象。一种方法是在尽可能窄的范围内声明变量。例如:在try块中,使用方法局部变量

你可能也必须这样做

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

甚至可以调用System.gc


您需要提供有关代码、设置的更多信息,以便其他开发人员能够详细理解和分析您的问题……第一步是确保您不引用任何不需要的对象,并增加可用内存。如果你需要更多的帮助,你必须提供更多的细节。一千个测试用例怎么可能需要15个小时呢?我可以在几分钟内运行100个完整的Selenium测试。