java中的引用

最近打算跳槽,读了一下极客时间的java核心技术36讲,感觉还不错,就此做个笔记(感兴趣的也可以点击购买链接http://stuq.com/a/100nJ,非广告推广)。本文所有内容,摘自https://time.geekbang.org/column/82笔记,侵删

简介

强引用:只要强引用还指向一个对象,就证明对象还活着。如果一个普通的对象,如果引用设置成null,就会被垃圾收回了,但不会立即被收回。
软引用:可以让对象豁免一些垃圾收集,只有JVM内存不足的时候,才会对其进行收回。JVM会保证在OOM之前,确保已经回收了软引用指向的对象。一般用软引用来实现内存敏感的缓存。
弱引用:不能让对象进行豁免垃圾收集,应用例子就是WeakHashMap,它和HashMap几乎一样,唯一的区别就是它的键(不是值!!!)使用WeakReference引用。当WeakHashMap的键标记为垃圾的时候,这个键对应的条目就会自动被移除。当一个对象被标记位弱可达(也就是所有引用它的都是弱引用)那么就会被垃圾收集器标记为可终结(finalizable)的。软引用和弱引用的区别就是,软引用保留时间会比较长,只有当内存不多的时候才会回收软引用的对象
幻象引用:也成为虚引用,它的唯一作用就是当其指向的对象被回收之后,自己被加入到引用队列,用作记录该引用指向的对象已被销毁。

强可达:当一个对象可以有一个或者多个线程不通过各种引用访问到的情况,就是强可达。比如:新创建一个对象,那么创建这个对象的线程对它就是强可达。
软可达:只能通过软引用才能访问时的状态
弱可达:只能通过弱引用访问时的状态
幻象可达:没有强引用,软引用还有弱引用,并且经过finalize过的就是幻象可达

    原文作者:上官若枫
    原文地址: https://www.jianshu.com/p/9c459c7b8890
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞