“执行GC”按钮在jconsole中有什么作用?

时间:2013-02-15 20:04:36

标签: java garbage-collection jmx

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

4 个答案:

答案 0 :(得分:5)

你可以自己找出答案。 JConsole的代码是OpenJDK的一部分。 您也可以在grepcode.com上查看。

该按钮调用实现gc()的对象的MemoryMXBean方法,该方法最有可能由com.sun.management.MemoryImpl类实现。该类包含gc()方法的实现,如下所示:

public void gc() {
    Runtime.getRuntime().gc();
}

现在,如果您考虑在java.lang.System中实现gc()方法,如下所示:

public void gc() {
    Runtime.getRuntime().gc();
}

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

答案 1 :(得分:2)

根据this link,是的,它确实执行了System.gc()

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我担心他们在引擎盖下做的几乎一样,但我不确定我是否同意这样的描述:

  

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

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

  

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

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