2

我目前正在为位于法国的一家主要能源管理部门对许多 Java 应用程序进行代码审计。

我使用了许多工具来审核代码(我什至编写了一个特定的解析器,因为我无法编译代码......)。对于性能问题(审计的一个方面),我使用dynaTrace了它,它告诉我susrvivor空间完全是空的。

此外,Eden space永远不会收集垃圾,这会在终身空间上引发大量“停止世界 GC”。Enden space空间为 1GB,为survivors300MB,tenured为 2.8GB。

你能帮我找到这种奇怪行为的解释吗?提前致谢。

4

1 回答 1

2

根据这篇文章:https ://stackoverflow.com/a/39933015/6162023

那么,如果对象的大小更小(不是巨大的),是否会有将对象直接从 eden 复制到 Old 的场景?

如果您使幸存者空间足够小以每次触发完整收集,则对象将从 Eden 转到 Tenured。

在您的情况下,如果代码包含内存泄漏(这是最可能的情况),如果泄漏足够大以至于 Minor GC 会填满您的所有 Survivor 空间,那么对象将被移动到 Old Gen (Tenured) 空间马上。

于 2019-02-04T08:45:51.673 回答