Java中的强引用、软引用、弱引用、虚引用

ⅰ亾dé卋堺 提交于 2020-10-05 13:50:45

1.强引用
直接用new构建的对象的引用,jvm就是抛出OOM也不会回收;当不需要该对象时,可以通过弱化该引用去让 GC回收。
如:

String str=new String("abc")//强引用;
str = null//当不需要时显示地赋值null,这样GC就会认为不存在引用,可以回收这个对象

或者在方法中新建一个强引用,引用保存在栈中,对象则在堆中,当方法调用完毕后,栈空间自动释放,这个对象的引用数为0,那么就可以回收了。

2.软引用
当一个对象仅具有软引用时,如果内存充足,那么就不会回收这个对象;而如果内存不足,就会将它回收。
软引用可以和引用队列联合使用,当对象被回收前,会将这个对象的软引用加到关联的引用队列中,程序可以通过判断引用队列中是否加入了该引用来了解其对象是否已经被垃圾回收了。
常用于网页缓存、图片缓存。

3.弱引用
和软引用有点相似,但弱引用是不管内存是否充足,只有发现了弱引用就会回收该对象。
同样可以和引用队列联合使用。

4.虚引用
它不会对对象的生命周期有任何影响。虚引用主要用来跟踪对象被垃圾回收的活动。
必须和引用队列一起使用。当对象被回收之前,GC会先将虚引用放入引用队列中。
如果虚引用被放入队列中了,表示该对象要被回收了,可以在被回收之前做些操作。

理解Java的强引用、软引用、弱引用和虚引用
Java 如何有效地避免OOM:善于利用软引用和弱引用

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!