在idea 是搜索help gc 会出现如下图所示结果:
可以发现,有很多将引用置为null的操作,然后注释写的是help gc 。
那么,这个help gc操作真的有用吗?
有一种说法是,现在jvm已经足够智能,会进行自动优化,不需要这样做。
另一个说法是,具体有没有用,得看具体的代码。如果那个引用从来都没有逃逸出去,这样写就是没有什么作用的。有人说,逃逸分析是在1.6才实现,置null 操作在1.6之前可能有些用处。在即使逃逸分析已经很牛的现在,在Tree、链表这种结构中依旧要置null,因为还有一个问题是:浮动垃圾。
浮动垃圾:float garbage
参考:https://stackoverflow.com/questions/10106191/openjdks-linkedblockingqueue-implementation-node-class-and-gc
在链表、Tree这类结构中,有1个~N个字段指向后继节点。比如单向链表中的next,TreeNode中的left、right等。置null 操作是有help gc的作用的。
另外,Effective Java 3rd 的Item7:Eliminate obsolete object references 也讲了这个问题。
https://jiapengcai.gitbooks.io/effective-java/content/chapter1/di-7-tiao-ff1a-xiao-chu-guo-shi-de-dui-xiang-yin-yong.html