有一个按钮"执行GC"在jconsole中,任何人都知道如果我点击该按钮会发生什么,它正在调用System.gc()
?
答案 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虚拟机已尽最大努力从所有丢弃的对象中回收空间。
如果他们这样做,我不敢说你可以随时 。