Java 垃圾收集:伊甸园空间很快被填满。这是因为内存泄漏吗?

Java 垃圾收集:伊甸园空间很快被填满。这是因为内存泄漏吗?,java,memory-leaks,garbage-collection,Java,Memory Leaks,Garbage Collection,在我们的prod服务器中,eden空间很快就被填满了,强制定期进行少量收集。下图显示了日志文件的GC分析 下面列出了VM选项 <jvm-options>-XX:SurvivorRatio=6</jvm-options> <jvm-options>-XX:NewSize=1344m</jvm-options> <jvm-options>-XX:MaxNewSize=1344m</jvm-options>

在我们的prod服务器中,eden空间很快就被填满了,强制定期进行少量收集。下图显示了日志文件的GC分析

下面列出了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>
-XX:surviviorratio=6
-XX:NewSize=1344m
-XX:MaxNewSize=1344m
-Xms3072m
-Xmx3072m
-XX:MaxPermSize=400m
-XX:NewRatio=2
发生这种情况是因为内存泄漏吗


任何帮助都将不胜感激。

一个繁忙的应用程序每秒可以创建大约1/2 GB的垃圾。在你的伊甸园空间填满之前,这会给你2.5秒的垃圾。如果您创建的代码少于此值,则您的应用程序不会太忙,或者代码效率也不会很高


如果您想减少产生的垃圾量,我建议您使用VisualVM或YourKit之类的工具来评测应用程序。另一种选择是增加伊甸园空间。e、 我会从8G或16GB或1/3的内存开始。并在调整应用程序时减少它。

不是内存泄漏,而是创建了许多临时对象。我遇到了一个问题,我们使用一个简单的实现对3d点进行了大量计算,为每个临时结果创建了一个新对象(在C++中可能可以正常工作),但它在垃圾中每秒生成千兆字节。在重写它以便尽可能多地重用对象之后,它下降到每秒20兆


你能做什么?如果是您的代码,请尝试使用预期的目标大小预先分配数组、列表和strin buffer;避免字符串连接;重用对象。如果你有很多框架代码和库,你只能尝试调整eden空间;检查将其缩小是否有助于您的案例(yoy将获得更多更快完成的GC事件,您需要衡量它是否有帮助)。

是否以分钟为单位?每一到两分钟一次并不是很多。为什么你觉得它有问题?你有没有这个数据的来源?我不怀疑,但我很想看到一个来源。Azul首席技术官的这篇演讲建议每秒1/2GB。这也是我的经验。增加伊甸园空间,在微观基准测试和我的交易系统中表现出色。我已经研究了一些方法来说明在这个问题上投入更多的eden空间有助于更通用的应用程序。