Java 分析工具如何在某个按钮单击或获取堆快照时执行垃圾收集?

Java 分析工具如何在某个按钮单击或获取堆快照时执行垃圾收集?,java,garbage-collection,jvm,Java,Garbage Collection,Jvm,像YourKit或JProfiler这样的Java分析器几乎总是有一个按钮,上面写着“performgc”。该按钮上的实际文本与此问题无关。此外,当我们在这些工具中获取堆快照时,JVM似乎正在执行垃圾收集。但是我知道System.gc()实际上并不能保证垃圾收集。那么,每次单击特殊按钮或拍摄堆快照时,这些探查器工具实际上是如何决定性地执行GC的呢?他们是否在内部调用了一些非java本机方法来绕过System.gc()调用不会每次都强制执行gc的限制?JVM公开了,这使得调试器、探查器和类似工具能

像YourKit或JProfiler这样的Java分析器几乎总是有一个按钮,上面写着“performgc”。该按钮上的实际文本与此问题无关。此外,当我们在这些工具中获取堆快照时,JVM似乎正在执行垃圾收集。但是我知道
System.gc()
实际上并不能保证垃圾收集。那么,每次单击特殊按钮或拍摄堆快照时,这些探查器工具实际上是如何决定性地执行GC的呢?他们是否在内部调用了一些非java本机方法来绕过
System.gc()
调用不会每次都强制执行gc的限制?

JVM公开了,这使得调试器、探查器和类似工具能够比您的程序更深入地访问VM的内部工作(也有充分的理由).

考虑到堆快照,每次拍摄堆快照时都会执行完整的GC。这与
System.gc()
的功能无关。您只需发送一个“收集堆快照”信号,VM就会完成这项工作,其中包括一个完整的GC

考虑到执行GC按钮,配置文件将只调用
System.GC()
方法。虽然这是不可靠的,但它通常是有效的。看