我目前正在为位于法国的一家大型能源管理公司对许多java应用程序进行代码审计。
我使用了很多工具来审核代码(我甚至编写了一个特定的解析器,因为我无法编译代码……)。对于性能问题(审计的一个方面),我使用 dynaTrace
它告诉我 susrvivor
空间完全是空的。
除此之外 Eden space
从来没有垃圾收集,这激起了大量的“停止世界gc”的终身空间。这个 Enden space
是1gb空间, survivors
是300mb tenured
是2.8gb。
你能帮我解释一下这种奇怪的行为吗?提前谢谢。
1条答案
按热度按时间qmelpv7a1#
根据这篇帖子:https://stackoverflow.com/a/39933015/6162023
那么,如果物体的尺寸更小(不是很大),是否会有一个场景让物体直接从伊甸园复制到旧世界呢?
如果你使幸存者的空间足够小,每次都能触发一个完整的集合,那么这些物体将从伊甸园变成终身。
在您的例子中,如果代码包含内存泄漏(这是最可能的情况),如果泄漏足够大,一个较小的gc将填满您的所有幸存者空间,那么对象将直接移动到旧gen(tenured)空间。