GC(2)、再谈引用

一、概述
上文提到了两种基础算法,但是不管你是哪种算法都离不开两个字:引用

二、引用的概念
JDK1.2以前,对引用的定义很传统:
如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就成这块内存代表着一个引用。

三、新版本引用的概念
在JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)四种。这四种强度从高到低。

1、强引用
无处不在。类似Object obj = new Object();这样的引用都是强引用,垃圾收集器永远不会回收掉被强引用正在引用着的对象。

2、软引用
描述一些还有用,但并非必须的对象。在堆内存即将满了之前(系统即将发生OOM的之前),将会把这些对象列进回收范围之中进行二次回收,假设这次回收还没有足够的内存,那只好抛出OOM了。

3、弱引用
也是描述一些还有用,但并非必须的对象。但是比软引用更弱一些。被弱引用关联的对象只能活到下一次垃圾收集发生之前,第二次垃圾回收一定会将弱引用的对象回收掉,不管内存是否富裕。

4、虚引用
也称幽灵引用或幻影引用。他是最弱的一种引用关系。此引用完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象的实例,为了衣蛾对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。(来自【深入理解Java虚拟机】的解释)

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


GC(2)、再谈引用_第1张图片
qrcode_for_gh_577b64e73701_258.jpg

你可能感兴趣的:(GC(2)、再谈引用)