详解jvm的5种引用
5种引用的介绍
在Java虚拟机中有5中常见的引用,强引用,软引用,弱引用,虚引用和终结器。

强引用:直接引用。
软引用和弱引用
在没有没强引用引用且进行垃圾回收时,如果内存不足,软引用对象就会被垃圾回收,而弱引用只要进行垃圾回收就会被回收掉。
虚引用
虚引用并不会决定对象的生命周期,在任何时间内都会被回收掉
在使用虚引用的时候,必须和引用队列一起使用,虚引用的构造器必须传入一个该类型的引用队列。
- 一般用来跟踪垃圾回收的过程,在对象被垃圾回收时收到一个系统消息。程序可在收到某个虚引用对象被回收后做相应的措施。
- 当垃圾回收器准备回收一个对象时,如果发现这个对象存在虚引用,就会在垃圾回收前将这个对象的虚引用加入到引用队列中去。
- 可以通过检查引用队列中是否含有相应的虚引用对象来判断对象是否被回收
- 在其关联的虚引用出队之前,是不会销毁该对象的。
- 如果一个对象没有软引用和强引用,对于垃圾回收器而言就是可以被清除的,在清除之前,会调用其finalize()方法,如果一个对象已经调用过finalize()方法但是还没有被释放,它就变成了一个虚可达对象。
- 与软引用和弱引用不同,显示的使用虚引用可以阻止对象被清除,只有在程序中显式或者隐式移除掉这个虚引用的时候这个已经执行过finalize()的对象才会被清除。先要显式的移除虚引用的话,只需要将其从引用队列中取出然后置为null即可。


622

被折叠的 条评论
为什么被折叠?



