jconsole 中有一个“Perform GC”按钮,任何人都知道如果我单击该按钮会发生什么,它正在调用System.gc()
?
4 回答
你可以自己找出来。JConsole 的代码是 OpenJDK 的一部分。您也可以在grepcode.com上查看。
按钮调用gc()
对象实现的方法,该方法MemoryMXBean
很可能由com.sun.management.MemoryImpl
类实现。此类包含gc()
方法的实现,如下所示:
public void gc() {
Runtime.getRuntime().gc();
}
现在,如果您考虑如下所示的gc()
方法的实现java.lang.System
:
public void gc() {
Runtime.getRuntime().gc();
}
你的问题的答案是:技术上不,但它做同样的事情。
根据此链接,是的,它确实执行System.gc()
。
差不多。JConsole 中MemoryTab中的 GC 按钮调用MemoryTab.gc(),后者又调用目标 JVM 的MemoryMXBean.gc()。javadoc 说这个调用相当于java.lang.System.gc()。
我担心他们在引擎盖下的行为几乎相同,但我不确定我是否同意以下描述:
Memory 选项卡具有“Perform GC”按钮,您可以随时单击该按钮执行垃圾收集。
当实际上System.gc()
只是对 VM 的建议时:
调用 gc 方法表明 Java 虚拟机花费精力回收未使用的对象,以便使它们当前占用的内存可用于快速重用。当控制从方法调用返回时,Java 虚拟机已尽最大努力从所有丢弃的对象中回收空间。
如果他们也这样做,我不敢说你可以随时做。