4

jconsole 中有一个“Perform GC”按钮,任何人都知道如果我单击该按钮会发生什么,它正在调用System.gc()

4

4 回答 4

5

你可以自己找出来。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();
}

你的问题的答案是:技术上不,但它做同样的事情。

于 2013-02-15T20:20:28.897 回答
2

根据此链接,是的,它确实执行System.gc()

于 2013-02-15T20:14:02.320 回答
0

差不多。JConsole 中MemoryTab中的 GC 按钮调用MemoryTab.gc(),后者又调用目标 JVM 的MemoryMXBean.gc()。javadoc 说这个调用相当于java.lang.System.gc()

于 2013-02-15T20:17:42.647 回答
0

我担心他们在引擎盖下的行为几乎相同,但我不确定我是否同意以下描述:

Memory 选项卡具有“Perform GC”按钮,您可以随时单击该按钮执行垃圾收集。

当实际上System.gc()只是对 VM 的建议时:

调用 gc 方法表明 Java 虚拟机花费精力回收未使用的对象,以便使它们当前占用的内存可用于快速重用。当控制从方法调用返回时,Java 虚拟机已尽最大努力从所有丢弃的对象中回收空间。

如果他们也这样做,我不敢说你可以随时

于 2013-02-15T20:20:12.140 回答