1.4种引用类型
1.一个对象如果具有强引用,则绝对不会被GC回收
2.一个对象具有软引用,则在内存充足的时候,GC不会回收;内存不足时会回收对象空间
3.一个对象具有弱引用,则不管内存状态如何,被GC发现了就会被回收
4.一个对象具有影子引用,则这个对象就等于没有引用一样随时可能被回收(影子引用就是用来跟踪垃圾回收状态的)
补充:
(1)当一个对象具有软引用或者弱引用时,这个对象被GC回收的时候,可以将这个对象回收记录记录到相应的引用表中(引用表中记录了最近被回收的对象)
(2)一个对象为什么要给予软引用?举一个例子,当我们浏览网页时,我们究竟需不需要保存前一篇网页呢?答案是可以,我们可以用类似于软引用的对象来保存。如果内存空间够大,我们就保存以前的网页做好用户回退的准备;如果小了,我们就回收网页数据。
(3)弱引用的对象生存周期是一瞬间吗?不是的,GC扫描对象并进行相应的回收是需要一定的时间的(垃圾回收是一个优先级很低的线程),我们可以将一些偶尔用到的、比较特殊的对象置成弱引用。
(4)影子引用是用来干什么的?一个对象如果被给予了影子引用,则它在被回收的时候就一定会被记录在与之关联的引用队列中(因为影子引用必须和引用队列关联使用)。所以影子引用就是用来记录特定对象的回收情况的。
2.6种可触及状态
强可触及,软可触及,弱可触及,可复活可触及,影子可触及,不可触及。
网友评论