如何在某些按钮单击或堆快照上执行分析工具执行垃圾回收?

时间:2013-09-13 14:51:26

标签: java garbage-collection jvm

YourKit JProfiler 等Java分析器几乎总是有一个“执行GC ”的按钮。该按钮上的实际文本与此问题无关。此外,当我们在这些工具中获取堆快照时,JVM似乎正在执行垃圾收集。但我知道System.gc()实际上并不能保证垃圾收集。那么,每次单击特殊按钮或执行堆快照时,这些探查器工具如何确定性地执行GC?他们是否在内部调用了一些非java本机方法来解决System.gc()调用每次都不强制GC的限制?

2 个答案:

答案 0 :(得分:1)

JVM公开了JavaTM Virtual Machine Tool Interface,它允许调试器,分析器和类似工具对虚拟机的内部工作进行更深入的访问,而不是程序可以拥有的(出于好的理由)。 / p>

答案 1 :(得分:0)

考虑堆快照,每次执行堆快照时都会执行完整GC。这与System.gc()的做法无关。您只需发送“收集堆快照”信号,VM即可完成工作 - 其中包括Full GC。

考虑到执行GC按钮,配置文件将只调用System.gc()方法。虽然这不可靠但通常有效。请参阅System.gc() vs GC button in JVisualVM/JConsole