4种引用

区别与使用场景:
不同引用类型,主要是对象不同的可达性状态和对垃圾收集的影响
1、强引用
强引用是普通对象引用,只要还有强引用指向一个对象,垃圾收集器就不会碰这种对象。一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应引用赋值为null,就是可以被垃圾收集的了。
场景:
项目中到处都是。
2、软引用
只有当JVM认为内存不足时,才会去试图回收软引用指向的对象。JVM会确保在抛出OutOfMemoryError之前,清理软引用指向的对象。
场景:
图片缓存框架中,“内存缓存”中的图片是以这种引用来保存,使得JVM在发生OOM之前,可以回收这部分缓存。
3、弱引用
用来构建一种没有特定约束的关系。如维护一种非强制性的映射关系,如果试图获取时对象还在,就使用它,否则重现实例化。
场景:
一个类发送网络请求,承担callback的静态内部类,则常以虚引用的方式来保存外部类(宿主类)的引用,当外部类需要被JVM回收时,不会因为网络请求没有及时回来,导致外部类不能被回收,引起内存泄漏。
4、幻象引用
不能通过它访问对象。只是提供了一种确保对象被finalize以后,做某些事情的机制。通常用来做所谓的Post-Mortem清理机制。
场景:这种引用的get()方法返回总是null。可用来跟踪对象被垃圾回收器回收的活动,当一个虚引用关联的对象被垃圾收集器回收之前会收到一条系统通知。

猜你喜欢

转载自blog.csdn.net/tongwudi5093/article/details/113625182