這個(gè)問題困擾了我挺久的除盏,網(wǎng)上也眾說紛紜叉橱,比較流行的一種說法就是:
要根據(jù)場景來確定挫以,若這個(gè)方法執(zhí)行非常耗時(shí),且在方法初始就產(chǎn)生了一個(gè)大對象窃祝,那 么在方法執(zhí)行過程中最好是在這個(gè)大對象使用完畢后就將其置為null掐松,這樣有助于垃圾
收集器及時(shí)將其回收。
這個(gè)說法看著確實(shí)合理粪小,但是網(wǎng)上也有其他不同的聲音大磺,所以我想找一個(gè)相對靠譜的解答。最后在stackoverflow上看到一篇高贊回答探膊,且被多個(gè)類似問題引用杠愧,我個(gè)人覺得比較靠譜,所以在此做個(gè)記錄逞壁。
答案截圖
關(guān)鍵在最后一句話流济,大致意思是:對于現(xiàn)代java虛擬機(jī)來說,這樣的建議(在方法中講對象設(shè)置為null)已經(jīng)不再適用腌闯,JIT編譯器能知道一個(gè)本地對象何時(shí)不再被使用绳瘟。
總結(jié)起來就是說,沒有必要顯示的將不再使用的對象設(shè)置為null姿骏。
另外糖声,答案下方還有補(bǔ)充回答,既針對線程池中線程持有對象而不釋放時(shí)的問題:
自行翻譯哈