我对Java的垃圾收集器的了解是,它处理所有需要的东西,但我关心的是效率。在Java中释放对象
一些其他语言,如Python - 据我所知 - ,可以通过实际这样做有助于垃圾回收器:
objectReference = none
这是否工作在Java中,程序员可以几乎免费的方式通过将变量分配给null以有效的方式堆存储器?如果是的话,与C的free()函数手动释放内存相比,这个效率如何?
我对Java的垃圾收集器的了解是,它处理所有需要的东西,但我关心的是效率。在Java中释放对象
一些其他语言,如Python - 据我所知 - ,可以通过实际这样做有助于垃圾回收器:
objectReference = none
这是否工作在Java中,程序员可以几乎免费的方式通过将变量分配给null以有效的方式堆存储器?如果是的话,与C的free()函数手动释放内存相比,这个效率如何?
变量在超出范围后不再存在,例如,当方法返回时,所以早期很少有从变量中获得任何好处。
字段的生命周期等于拥有的对象,所以如果一个对象会继续存在一段时间,但是您知道不再需要字段引用,那么该字段可能允许早期的GC引用的对象。
是否打扰做这取决于拥有的对象将停留多久,以及被引用的对象有多大。这很少值得。
如果转义分析证明引用永远不会退出范围,那么Object可以被GCed(或更具体地说*符合GC *),但是该字段的值本身可以被复制到另一个引用中,然后被使用。 – TheLostMind
设置对null的引用sorta帮助。如果这是对象的唯一引用,那么垃圾收集器可以自由地清理该对象的内存。充其量,你可以向垃圾收集器发出信号,好的时候是用System.gc()
释放内存,但它最终仍然是一个建议,并不强制它。
请参阅[在Java影响垃圾回收中是否将对象指定为null](http://stackoverflow.com/questions/449409/does-assigning-objects-to-null-in-java-impact-garbage-collection) 。另外,我们需要记住algos不断从JDK更改为JDK。 –
你的答案也可能在这篇文章中:http://stackoverflow.com/questions/1481178/how-to-force-garbage-collection-in-java – vefthym
我不确定你应该标记这个问题_python_甚至尽管你确实提到过它。您将吸引无法回答问题的Python程序员。对于这个问题,Python真的不重要。当您询问语言的比较时,_c_标签可能正常。 – Matthew