关于垃圾收集的效率:故意引用一个对象与让它超出范围有什么好处?如果我特意将Object设置为null,那么JVM实际上会做什么不同的事情吗?
扩展这个想法,正在清理Soft和/或Phantom引用是否值得为改善GC相关性能而努力?我猜测充满幻影参考的代码表明比GC更大的问题当然可以解决。
答案 0 :(得分:2)
仅当您尝试在之间分配时,才会取消引用并超出范围。
除非对象是 large (或者只保留对大量数据的间接引用),否则这不是很有用。
答案 1 :(得分:1)
首先,你可能最终编写代码(没有注意到),这将继续创建永远不会超出范围的对象,但在某个时刻对你来说是垃圾。始终关注这一点,因为它比许多人想象的更频繁。
尽管可能不会产生显着的结果,但帮助GC可能始终是一种很好的做法。然而,考虑到代际GC的工作,理论认为帮助GC应该很重要,因为删除旧物体比新物体更昂贵。
答案 2 :(得分:0)
在给定方法调用结束时,您明确取消引用的大多数对象都将超出范围。然而,在此问题成为问题之前,编译器可能会执行转义分析并将其分解为灵长类动物。净输出不是试图比编译器或垃圾收集器更聪明。只要感到安慰,热点就认为我们太具有挑战性而无法构成威胁。