【问题标题】:Java memory clean upJava 内存清理
【发布时间】:2015-08-07 11:28:21
【问题描述】:

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

这里很热,它发生了, 我们有大约 1000 个自动化测试用例。测试用例执行涉及创建大量消息,因此产生大量字符串;重复读取大文件并验证内容并在获得验证结果后偏离路线抛出所有内容。它适用于所有测试用例,需要 15 到 20 小时。

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

请问,有人可以提供提示、建议吗?

-提前致谢

【问题讨论】:

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

标签: java memory-management out-of-memory


【解决方案1】:

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

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

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

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

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

5. 启用垃圾收集日志记录 (-Xloggc:/var/log/YOUR_APP/YOUR_APP-gc.log) 并查看它的行为方式以及堆的增长情况。可能你有内存泄漏。

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

7.您可以使用以下方式调用垃圾收集器:

System.gc();

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

JVM 决定何时执行它。一般来说,如果 JVM 即将抛出 OutOfMemoryError,调用 System.gc() 不会阻止它。更好地调查为什么你泄漏了这么多内存并一路清理它。但这并不意味着它会立即执行。

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

希望对您有所帮助。

【讨论】:

    【解决方案2】:

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

    您可能还需要increase Java heap size

    【讨论】:

      【解决方案3】:

      您可以明确地将对象设为 null。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-24
        • 2014-03-21
        • 2015-06-14
        • 1970-01-01
        • 1970-01-01
        • 2022-08-04
        • 2016-01-20
        • 1970-01-01
        相关资源
        最近更新 更多