这个问题困扰了我挺久的,网上也众说纷纭,比较流行的一种说法就是:
要根据场景来确定,若这个方法执行非常耗时,且在方法初始就产生了一个大对象,那 么在方法执行过程中最好是在这个大对象使用完毕后就将其置为null,这样有助于垃圾
收集器及时将其回收。
这个说法看着确实合理,但是网上也有其他不同的声音,所以我想找一个相对靠谱的解答。最后在stackoverflow上看到一篇高赞回答,且被多个类似问题引用,我个人觉得比较靠谱,所以在此做个记录。
答案截图关键在最后一句话,大致意思是:对于现代java虚拟机来说,这样的建议(在方法中讲对象设置为null)已经不再适用,JIT编译器能知道一个本地对象何时不再被使用。
总结起来就是说,没有必要显示的将不再使用的对象设置为null。
另外,答案下方还有补充回答,既针对线程池中线程持有对象而不释放时的问题:
自行翻译哈
网友评论