java的强引用、软引用、弱引用、虚引用是什么

转载这里

jdk1.2之前有两种引用,“已经被引用”和“未被引用”。可是在某些特定 的情况下无法描述一些现象。例如在内存紧张的时候需要抛弃一些对象。
所以在jdk1.2之后,就把引用分为了了四种:强引用、软引用、弱引用、虚引用。
下面介绍一下这四种引用:

强引用

强引用:在我们使用的大部分情况下,都是强引用。
例如Object o=new Object();只要o还指向object对象,object对象就不会被回收;只要强引用存在,那么就不会回收这个引用所指向的对象。就算内存不足,jvm也只会抛出异常。而不会回收这个引用。只有我们手动的赋值null,那jvm就会回收相应的null了。

软引用(SoftReference):

如果一个对象具有软引用,如果内存充足,软引用对象不会被回收。那么当内存不足的时候,就会回收软引用对象。如果软引用回收了之后,仍然没有足够的内存空间,那么就抛出异常。

弱引用(WeakReference)

如果一个对象具有弱引用,那么一旦垃圾回收器开始扫描发现了弱引用;那么就会回收弱引用所指向的对象,不论内存是否充足。

虚引用(PhantomReference)

虚引用:其实和名字非常的贴金,形同虚设,和没有引用一样;用来跟踪对象没有被垃圾回收的活动;虚引用必须和引用队列(ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。程序如果发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

注意:在实际的编程中很少用到弱引用和虚引用,更多的使用软引用。软引用可以加速JVM对垃圾内存的回收速度,可以维护系统的运行安全,防止内存溢出(OutOfMemory)等问题的产生。

扫描二维码关注公众号,回复: 12803025 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_43815275/article/details/114520651