Mat*_*ark 4 java garbage-collection jmx
当我在VisualVM中研究我的应用程序的行为时,我遇到了这个并且感到困惑,我认为执行垃圾收集的JMX调用将具有与调用相同的功能System.gc(),但是在我尝试过的所有环境中,JMX调用总是导致较小的堆使用量然后调用System.gc(),功能上有什么区别?
你可以在最后一滴上看到 - 我手动点击了执行GC按钮,我的使用率比常规系统集合略低.关于为什么会这样的想法?
我已经在多个环境中尝试了这个,将集合留给系统并手动调用 System.gc(),每次JMX调用都会清除更多.
正如您在发布的图像中看到的那样,系统垃圾收集正在运行,JMX调用只是清除了更多,问题是这两个调用之间有什么区别?
这必须是间接的(由于它在程序执行中的不同点或类似因素被调用) - Sun的实现MemoryMXBean,sun.management.MemoryImpl:
public void gc() {
Runtime.getRuntime().gc();
}
Run Code Online (Sandbox Code Playgroud)
System.gc():
public static void gc() {
Runtime.getRuntime().gc();
}
Run Code Online (Sandbox Code Playgroud)
因此,建议垃圾收集的两种方式之间确实没有功能差异,唯一的区别在于调用它的时间和方式.
| 归档时间: |
|
| 查看次数: |
832 次 |
| 最近记录: |