Java中的强引用,软引用,弱引用,虚引用有什么用?

https://www.zhihu.com/question/37401125/answer/100981172

1、

强引用是使用最普遍的引用:Object o=new Object(); 特点:不会被GC
  • 将对象的引用显示地置为null:o=null; // 帮助垃圾收集器回收此对象
  • 举例ArrayList的实现源代码:

 
2、
软引用用来描述一些还有用但是并非必须的对象,在Java中用java.lang.ref.SoftReference类来表示。
对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。因此,这一点可以很好地用来解决OOM的问题,并且这个特性很适合用来实现缓存:比如网页缓存、图片缓存等。

 

 

3、

弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。
在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。
 
Weak Reference标记
 
 ThreadLocal中的ThreadLocalMap其实就是Entry就是弱引用,防止线程结束后,ThreadLocal还有引用指向Entry,导致内存泄漏问题

4、虚引用也称为幻影引用:一个对象是都有虚引用的存在都不会对生存时间都构成影响,也无法通过虚引用来获取对一个对象的真实引用。
唯一的用处:能在对象被GC时收到系统通知,JAVA中用PhantomReference来实现虚引用。管理直接内存,虚拟机内部引用指向直接内存的资源

虚引用:网络加载外部资源时,使用虚引用关联外部资源
 
不同
 

 

 

posted on 2020-08-06 22:50  潮流教父孙笑川  阅读(153)  评论(0)    收藏  举报

导航