我们可以显式调用垃圾回收器吗?

2022-09-02 14:25:00

我的应用程序有很多迭代。到目前为止,我还没有遇到任何记忆问题。但是从代码级别来看,我可以怀疑很少有地方,这会导致内存泄漏和内存不足问题。我正在考虑手动调用垃圾回收器。手动调用垃圾回收器是否适合?


答案 1

您可以使用以下命令调用垃圾回收器:

System.gc();

但这并不意味着它将立即执行。JVM 决定何时执行它。一般来说,如果 JVM 即将抛出一个 ,调用不会阻止它。最好调查一下为什么你泄漏了这么多内存,并在此过程中清理它。OutOfMemoryErrorSystem.gc()

JavaDoc

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


答案 2

手动调用垃圾回收器是否适合?

不,这绝对不是好的做法。

您可以使用 .请注意,这不能保证调用垃圾回收器 - 它只向系统发出提示,表明执行垃圾回收可能是一个好主意。System.gc()

Oracle JVM中的垃圾回收器包含许多复杂的逻辑来确定何时以及清理什么。调整它需要了解其工作原理的详细信息。只是在程序中放置一个位置不太可能有太大帮助,事实上,它甚至会使情况变得更糟。System.gc()

有关如何使用 Java SE 6 调整垃圾回收的详细信息,请参阅 Java SE 6 HotSpot 虚拟机垃圾回收调整。