转载

「Offer收割机之JVM」:引用是个什么鬼

这两天,广州的天气又开始热了起来,又到了小动物交配的季节,啊呸,又到了一个收割 offer 的季节。 年底将至,又到了面试的高峰期,JVM 作为Java 程序员面试绕不过的一道坎儿,它又来了,你准备好了吗?

「Offer收割机之JVM」:引用是个什么鬼

说说引用

面试官 A: 小伙几,上篇我们说到了 JVM 收集的两种算法 —— 引用记数法和可达性分析算法 ,你对这两种算法的理解很清晰,那么这两种算法有一个很重要的点,就是『引用』,其实无论是引用记数法和可达性分析算法都离不开引用,那么你来谈谈引用吧。

我: 这个啊,简单,引用(reference)就是 一块内存存储着另一块内存地址 (自信脸

「Offer收割机之JVM」:引用是个什么鬼

面试官 A: 说的倒也没错,但是过于片面,那么你能不能详细讲一下引用呢?

我: 上白板,我直接上图吧(熟练的拿起马克笔

「Offer收割机之JVM」:引用是个什么鬼

面试官 A: 那么你能不能详细的说一下这四种引用是在什么情况下出现的呢,它们分别代表了什么意义?

我: 先说说强引用吧,我们日常中最常见到的就是强引用(拿起桌上的白板,开始手写代码),就像这样的,就属于强引用,它有多强呢,就是只要强引用存在,GC 永远不会对它下手,嗯,你可以理解为就是范闲,皇上的私生子。

String s = "vi的技术博客";

s = "技不可失";

面试官 A: 你也看庆余年啊,话说你看过原著没,结局是什么给我剧透剧透呗。

「Offer收割机之JVM」:引用是个什么鬼

我:咳咳,老哥这样不太好吧,这是我的微信: cm_950825 ,有什么咱们私聊好吧,不要砸我 offer 收割机的招牌,别人还以为我是靠裙带关系来着(小声BB

「Offer收割机之JVM」:引用是个什么鬼

面试官 A: 那你来说一下软引用吧。

我:我们还是接着来聊庆余年吧,开个玩笑啦,我来一起把软引用和弱引用一起说吧,它们都是用来描述一些 非必需的对象 ,但是弱引用比起软引用来说,更加的弱,怎么说呢,还是看图吧(挥斥方遒的感觉

「Offer收割机之JVM」:引用是个什么鬼

软引用关联的对象,在系统发生 OOM之前,会把这些对象列入到回收范围之中进行二次回收,如果这次回收仍然没有足够的内存,才会发生 OOM,它是长这样儿式儿的。

Object o = new Object();

SoftReference<Object> soft = new SoftReference<Object>(o);

而弱引用就是个弟弟,只要有 GC,必被回收,这个弟弟是这样的

Object o = new Object();

WeakReference<Object> weak = new WeakReference<Object>(o);

而它们的有一个普遍的应用场景:软引用和弱引用的一个特点是它何时被回收是不可确定的, 因为这是由GC运行的不确定性所确定的. 所以, 一般用它们是有价值被 缓存 , 而且很容易被 重新被构建 , 且 很消耗内存 的对象.

面试官 A:整挺好,那你来说说最后的这个虚引用吧。

我:虚引用啊,这玩意儿你可以理解为没有这个东西,它的唯一作用就是 能在这个对象被 GC 的时候收到一个系统通知

面试官 A:是这样啊,那行吧,我手机没油了,咱们下次接着聊(回去搜点题接着搞你

「Offer收割机之JVM」:引用是个什么鬼

写在后面

佛系运营导致粉丝基本不长,所以痛并思痛, 决定换个风格,原先的过于刻板单调,其实我是个很逗比的人,如果你喜欢这样酷炫的我,请  关注+在看  ,让我做的更好,给大家奉献更多的知识的同时带来更多的欢乐,关注我的公众号,回复『引用』即可获取本文所有表情包。

我从没见过一个不孤独的人会发出耀眼的光芒

「Offer收割机之JVM」:引用是个什么鬼

纯原创技术公号

作者:Vi

扫码获取更多干货

原文  http://mp.weixin.qq.com/s?__biz=MzU4MzU4MTkwMQ==&mid=2247484222&idx=1&sn=142a803f6163028105840c9e74316055
正文到此结束
Loading...