我怀疑方法局部变量仅在方法执行时有效。另外,当Eden
或Long-generation
块溢出(次要/主要GC)等时会触发GC。因此,如果方法主体末尾Eden
没有溢出怎么办,那么就无需触发GC。尽管不触发主要/次要GC,我们仍将销毁所有局部变量。怎么做?
垃圾收集器-有时称为“收割者”-按自己的时间表运行,并收集不参考的对象。当然,方法退出后就无法引用局部变量,因为它们超出了范围,因此它们对于您的程序来说是死的*,但是它们仍然存在于堆中,直到GC运行为止。
在正常情况下(和大多数异常情况),您无需告诉收割机何时进行工作。当需要它时,它会静默地来,带走那些不再需要的东西。这是使用高级语言进行工作的主要优点之一:可以安全地假设您不需要考虑诸如管理死对象的重新分配之类的事情。您可以将它们抛在肩上,知道它们永远不会打扰您。我想有些高性能,高需求的应用程序需要使用GC进行摆弄,但这是一种优化,除非您有确凿的相反证据,否则应该总是认为该优化为时过早。
*当然,对于返回到调用函数的局部变量,它可能会成为该范围内的局部变量,并且会增加寿命。通常,规则是:如果代码的某些部分仍在乎该变量,则不会对其进行垃圾回收,并且如果程序的任何部分都在乎该变量,则无需考虑它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句