通过引用对象来改进GC

时间:2011-07-26 22:57:06

标签: java garbage-collection

关于垃圾收集的效率:故意引用一个对象与让它超出范围有什么好处?如果我特意将Object设置为null,那么JVM实际上会做什么不同的事情吗?

扩展这个想法,正在清理Soft和/或Phantom引用是否值得为改善GC相关性能而努力?我猜测充满幻影参考的代码表明比GC更大的问题当然可以解决。

3 个答案:

答案 0 :(得分:2)

仅当您尝试在之间分配时,才会取消引用并超出范围。

除非对象是 large (或者只保留对大量数据的间接引用),否则这不是很有用。

答案 1 :(得分:1)

首先,你可能最终编写代码(没有注意到),这将继续创建永远不会超出范围的对象,但在某个时刻对你来说是垃圾。始终关注这一点,因为它比许多人想象的更频繁。

尽管可能不会产生显着的结果,但帮助GC可能始终是一种很好的做法。然而,考虑到代际GC的工作,理论认为帮助GC应该很重要,因为删除旧物体比新物体更昂贵。

答案 2 :(得分:0)

在给定方法调用结束时,您明确取消引用的大多数对象都将超出范围。然而,在此问题成为问题之前,编译器可能会执行转义分析并将其分解为灵长类动物。净输出不是试图比编译器或垃圾收集器更聪明。只要感到安慰,热点就认为我们太具有挑战性而无法构成威胁。