我對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