我正在尝试了解垃圾收集器方法。
"在Java中,您的程序必须调用垃圾收集器方法 经常;否则你的程序将被垃圾覆盖 对象"
我认为这是假的,因为程序应该自动执行此操作,在后台运行正确吗?
答案 0 :(得分:4)
正确。事实上,是没有垃圾收集器方法(System.gc()
是一个暗示,现在可能是垃圾收集的好时机,但它只不过了)。 JVM,如果它实现垃圾收集(以及所有Java SE和Java EE),它将根据自己的规则进行收集,这些规则通常包括同时清理短期对象,并在内存开始变低时执行主要收集或碎片。
答案 1 :(得分:0)
虽然通常调用System.gc()
被认为是坏的,坏的,坏的,非常糟糕的做法,但在某些情况下,这可能会阻止内存不足错误。这主要是当您以非常快速的顺序分配大量对象并且有时间时,其中许多对象不再被引用并且可以被删除。虽然System.gc()
只是一个提示,但有时系统可能需要此提示。或者,您可以重新考虑算法。
然而,对于较新的Java版本,这些情况越来越少见;过去比较常见。从官方角度来看,永远不会手动调用垃圾收集器。
答案 2 :(得分:0)
方法System.gc()不一定调用垃圾收集器。垃圾收集依赖于JVM实现。例如,当您执行System.gc()时,Linux JVM实际上可能会调用GC.Windows JVM可能不会。
假设您在内存中有太多无法访问的对象,但您仍有足够的堆空间,因此JVM可能决定不运行GC线程。所以结论“当你调用System.gc()并且没有必要调用它时,没有保证GC线程会运行。”
这是Java的主要优势之一,开发人员无需担心内存管理和内容。不像C ++,你需要做像
这样的事情free(obj);