垃圾收集:伊甸园空间迅速填满。这是由于内存泄漏吗?

时间:2011-08-05 06:44:41

标签: java memory-leaks garbage-collection

我们的prod服务器中的eden空间很快被填满,导致定期进行小型收集。下图显示了日志文件的GC分析。

http://imagebin.org/166489

下面列出了VM选项。

    <jvm-options>-XX:SurvivorRatio=6</jvm-options>
    <jvm-options>-XX:NewSize=1344m</jvm-options>
    <jvm-options>-XX:MaxNewSize=1344m</jvm-options>
    <jvm-options>-Xms3072m</jvm-options>
    <jvm-options>-Xmx3072m</jvm-options>
    <jvm-options>-XX:MaxPermSize=400m</jvm-options>
    <jvm-options>-XX:NewRatio=2</jvm-options>

这是否因内存泄漏而发生?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

繁忙的应用程序每秒可以创建大约1/2 GB的垃圾。在伊甸园空间填满之前,这会给你大约2.5秒的垃圾。如果您创建的数据少于此数,则您的应用程序不会那么繁忙或具有高效代码。

如果你想减少你产生的垃圾量,我建议你用VisualVM或YourKit之类的东西来分析你的应用程序。另一种方法是增加伊甸园空间。例如我会从8G或16GB或1/3的内存开始。并在调整应用程序时减少它。

答案 1 :(得分:0)

不是内存泄漏,但是你创建了很多临时对象。我遇到了一个问题,我们正在用3d点进行大量计算,这些计算都是为每个临时结果创建一个新对象(在C ++中可能正常工作),但它在垃圾中每秒生成千兆字节。在重写之后,它将尽可能多地重用对象,它降至每秒20兆。

你能做什么?如果是你的代码,尝试使用预期的目标大小预分配数组,列表和strin buffrs;避免字符串连接;重用ovjects。如果你有很多框架代码和库,你只能尝试调整伊甸园空间;检查是否将它缩小有助于你的情况(yoy会得到更多更快完成的GC事件,你需要测量它是否有帮助)。