Java 垃圾收集器可以被调用多少次?

Java 垃圾收集器可以被调用多少次?,java,garbage-collection,Java,Garbage Collection,我们可以在一个Java程序中多次调用垃圾收集器吗?如果“调用垃圾收集器”的意思是“调用System.gc()--您可以随时这样做。它可能会有一些效果,也可能没有效果。根据具体情况,它可能会使您的应用程序性能更好,也可能会使情况更糟 现代Java实现设计为使用完全透明的GC运行。我的经验是,很少有助于启动GC,尽管几乎总是调用GC()实际上会从JVM中得到某种响应——通常不会完全忽略它 我见过一些应用程序使用对gc()的重复调用来克服应用程序中的错误(通常与资源管理有关);甚至偶尔也会克服JVM中

我们可以在一个Java程序中多次调用垃圾收集器吗?

如果“调用垃圾收集器”的意思是“调用
System.gc()
--您可以随时这样做。它可能会有一些效果,也可能没有效果。根据具体情况,它可能会使您的应用程序性能更好,也可能会使情况更糟

现代Java实现设计为使用完全透明的GC运行。我的经验是,很少有助于启动GC,尽管几乎总是调用
GC()
实际上会从JVM中得到某种响应——通常不会完全忽略它

我见过一些应用程序使用对
gc()
的重复调用来克服应用程序中的错误(通常与资源管理有关);甚至偶尔也会克服JVM中的错误

不过,总的来说,我希望如果您发现您的应用程序需要经常拨动GC,那么就会出现一些问题,而这些天来,很可能就是应用程序。

如果“调用垃圾收集器”,您的意思是“调用
System.GC()
”——您可以随时这样做。它可能有一些效果,也可能没有效果。根据具体情况,它可能会使您的应用程序性能更好,也可能使情况更糟

现代Java实现设计为使用完全透明的GC运行。我的经验是,很少有助于启动GC,尽管几乎总是调用
GC()
实际上会从JVM中得到某种响应——通常不会完全忽略它

我见过一些应用程序使用重复调用
gc()
来克服应用程序中的错误(通常与资源管理相关);甚至有时候JVM中也会出现bug


不过,总的来说,我认为如果您发现您的应用程序需要经常拨动GC,就会出现一些问题,而这些天来,最有可能的是应用程序。

当然。JVM本身一直在做这件事,你可以。但你不应该。你为什么不试试看呢?@AdityaRamachandran你读过评论了吗?你可以。但是你不应该这样做。@AdityaRamachandran请关注这个讨论,这可能会对你有所帮助。当然JVM本身一直在做这件事,你可以。但你不应该。你为什么不试试看呢?@AdityaRamachandran你读过评论了吗?你可以。但是你不应该这样做。@AdityaRamachandran请关注这个讨论,这可能会对你有所帮助。伊姆霍:一个很好的答案,简单而中肯<例如,代码>系统::gc也用于在测试或沙盒中证明某些东西。就像清除
弱引用
的情况,等等。还有一些标志控制
System::gc
将要做的事情:
DisableExplicitGC
explicitgchinvokesconcurrent
它不需要是“现代Java实现”。手动调用
gc()
从来都不是必需的。@Holger——原则上是的。然而,我记得在Java的早期,当你想让统计数据看起来很好而实际上不需要内存时,我不得不帮助GC。实际分配总是在没有可用内存时触发gc。这在JDK1.1中确实有效。但是,我没有对1.0进行足够的测试来确定这一点……不过,唯一的例外是当有大量对象使用
finalize()
方法时。由于垃圾收集并不意味着终结,因此提前运行gc可能会有所不同。imho:一个很好的答案,简单且切中要害<例如,代码>系统::gc也用于在测试或沙盒中证明某些东西。就像清除
弱引用
的情况,等等。还有一些标志控制
System::gc
将要做的事情:
DisableExplicitGC
explicitgchinvokesconcurrent
它不需要是“现代Java实现”。手动调用
gc()
从来都不是必需的。@Holger——原则上是的。然而,我记得在Java的早期,当你想让统计数据看起来很好而实际上不需要内存时,我不得不帮助GC。实际分配总是在没有可用内存时触发gc。这在JDK1.1中确实有效。但是,我没有对1.0进行足够的测试来确定这一点……不过,唯一的例外是当有大量对象使用
finalize()
方法时。由于垃圾收集并不意味着终结,所以提前运行gc可能会有所不同。