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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容