System.gc() 什么时候做某事?

2022-08-31 08:31:29

我知道垃圾回收在Java中是自动化的。但我明白,如果你在代码中调用,JVM可能会也可能不会决定在那时执行垃圾回收。这是如何工作的?JVM在看到GC时究竟基于什么基础/参数决定做(或不做)GC?System.gc()System.gc()

是否有任何示例,在这种情况下,将其放在代码中是个好主意?


答案 1

在实践中,它通常决定执行垃圾回收。答案取决于许多因素,例如您正在哪个JVM上运行,它处于哪种模式以及它使用的垃圾回收算法。

我不会在你的代码中依赖它。如果 JVM 即将抛出一个 OutOfMemoryError,调用 System.gc() 不会阻止它,因为垃圾回收器会在它达到那个极端之前尝试尽可能多地释放它。我唯一一次看到它在实践中使用是在IDE中,它连接到用户可以单击的按钮,但即使在那里也不是很有用。


答案 2

我能想到的调用 System.gc() 的唯一有意义的示例是在分析应用程序以搜索可能的内存泄漏时。我相信探查器在拍摄内存快照之前调用了此方法。