Strongly Reachable, SoftReference, WeakReference和PhantomReference简介

导语

这个问题之前看过很多遍,其中周志明的《深入理解Java虚拟机》里讲的比较好,其他的基本都是三言两语,没讲原理。本文也不讲原理,只记录我认为需要记住的点。

简介

Strongly Reachable

不需使用Reference即可访问的对象。

Soft Reference

JVM在抛出OOM前会清理Soft reference引用的内存。在Android中,不建议使用Soft Reference做缓存,推荐使用LruCache类。

Weak Reference

比Soft Reference更弱的引用。

PhantomReference

finalizable队列里面会用到。

可达性

Strongly Reachable

不需要使用Reference即可访问的对象。

Softly Reachable

可以通过SoftReference访问的对象。

Weakly Reachable

可以通过WeakReference访问的对象。

Phantom Reachable

已经被finalized了的对象。

Object.finalize()

GC在执行对象回收之前,会调用这个方法。

ReferenceQueue

在创建一个PhantomReference时,会同时创建一个ReferenceQueue。在一个对象的finalize()方法之后,此对象的PhantomReference会进入到ReferenceQueue中。(后面没懂,先这样吧)

参考资料

  1. https://developer.android.com/reference/java/lang/ref/package-summary.html#reachability
  2. http://zhang-xzhi-xjtu.iteye.com/blog/484934
  3. https://dzone.com/articles/java-garbage-collector-and-reference-objects

你可能感兴趣的:(Strongly Reachable, SoftReference, WeakReference和PhantomReference简介)