为什么Java垃圾收集期间不将Java弱引用计为引用?

时间:2012-03-31 06:14:57

标签: java

为什么Java弱引用不算作垃圾收集的引用?

2 个答案:

答案 0 :(得分:9)

因为这只是它的目的。

如果0个引用指向它,则会对对象进行垃圾回收。由于弱引用本身不能防止对象被垃圾收集,因此在GC期间不会计算它。

查看 可达性 的各种定义,以获得清晰的图片:

答案 1 :(得分:4)

弱引用不计入GC下的引用,因为这是它们存在的整个点及其定义:引用不会导致它们指向的对象被认为是实时的。

这非常有用,因为它可以让您维护对象之间的关系,当您不再对这些对象感兴趣时,它们会自动消失。

您可以使用属性扩展对象,而不会导致对象永久链接到可访问性图形(不再需要时变为“语义垃圾”)。

例如,全局弱哈希表可以让您找到属于给定Student的所有Course个对象,反之亦然:所有Course个对象属于{{{ 1}}。

如果Student变为垃圾(您丢失了对它的所有引用),则弱哈希表将自动删除将Student与其Student对象相关联的条目。

优点是您不必将学生列表添加到Course课程中。而且,当你想摆脱Course时,你不必追捕每个Student对象,并从列表中删除该学生。

自然地忘记了Course“并且弱哈希表将自我清除。