资讯专栏INFORMATION COLUMN

几分钟理解 Jdk - Reference

JohnLui / 896人阅读

摘要:一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。为一个对象设置虚引用关联的唯一目的就是能在这个对象被垃圾收集器回收时收到一个系统通知。在之后提供了类来实现虚引用参考深入理解虚拟机

GC

$TODO$

一个对象的生命周期

一个对象的生命周期从它被创建开始,此时虚拟机会给它置一个内部标识finalizable,当 GC 到达某一个安全点并检验该对象不可达,即无引用指向它时,该对象会被放入一个 finalize queue(F queue),虚拟机将会执行其 finalize() 方法,并将 finalizable 标识清空,然后销毁该对象,其中 finalize() 方法的执行顺序是不稳定的,而且只能被执行一次

也就是说,如果在 finalize() 中采取某些方法,将有可能将对象从死亡边缘挽救回来,如果令一个引用指向 this,该对象很可能会在这次 GC 中复活,但只有一次

通常来说,不建议重写此方法

引用分类

Java 中,引用可以分为四种,下面我们简单地概括一下,其中,内存溢出之前指百分之九十八的 GC 回收了百分之二的内存

|引用|回收策略
|:-: |:-: |
|强引用|无引用指向时|
|软引用|内存溢出之前|
|弱引用|无比弱引用更强的引用指向时|

虚引用并没在上表,因为我也不清楚它地用途所在

以下为摘录自 《深入理解Java虚拟机》 中关于引用的内容:

在jdk1.2之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)四种:

强引用就是指在程序代码之中普遍存在的,类似Object obj = new Object()这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象

软引用是用来描述一些还有用但并非必需的对象。对于软引用关联着的对象,在系统将要发生 内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。在jdk1.2之后提供了 SoftReference

类来实现软引用

弱引用也是用来描述非必需对象的,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集发送之前。当垃圾收集器工作时,无论内存是否足够,都会回收掉 只被弱引用关联的对象。在jdk1.2之后提供了 WeakReference 类来实现弱引用

虚引用也称为幽灵引用或者幻影引用,它是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。为一个对象设置虚引用关联的唯一目的就是能在这个对象被垃圾收集器回收时收到一个系统通知。在jdk1.2之后提供了 PhantomReference 类来实现虚引用

Reference

$TODO$

ReferenceQueue

$TODO$

参考

1. 《深入理解Java虚拟机》

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67539.html

相关文章

  • 分钟理解 Jdk - ==,hashCode() 与 equals()

    摘要:小概与,这三个操作在程序当中满地都是,特别是容器里,如中的哈希映射与搜索元素就是根据和判断的,所以如何正确的理解和使用显得非常重要,并且在封装类的时候,十分建议通通重写我们先要知道这个概念,每个线程都有属于自己的虚拟机栈,虚拟机栈中的元素我 小概 ==,hashCode() 与 equals() ,这三个操作在 Java 程序当中满地都是,特别是容器里,如 Map 中的哈希映射与搜索元...

    CNZPH 评论0 收藏0
  • jvm垃圾回收三部曲

    摘要:强引用中最常见的引用,引用计数算法的就是典型的强引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。 概述 早在半个世纪以前,第一个使用了内存动态分配和垃圾收集技术的语言Lisp就已经诞生了,从那时,人们就在思考关于gc需要完成的三件事请: 哪些内存需要回收 什么时候回收 如何回收 直到今天已经有越来越多的语言开始内置内存动态分配和垃圾收集技术。经过长时间的发展,这些技术...

    wanghui 评论0 收藏0
  • 《深入理解java虚拟机》学习笔记系列——垃圾收集器&内存分配策略

    摘要:虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器。虚拟机总共运行了分钟,其中垃圾收集花掉分钟,那么吞吐量就是。收集器线程所占用的数量为。 本文主要从GC(垃圾回收)的角度试着对jvm中的内存分配策略与相应的垃圾收集器做一个介绍。 注:还是老规矩,本着能画图就不BB原则,尽量将各知识点通过思维导图或者其他模型图的方式进行说明。文字仅记录额外的思考与心得,以及其他特殊情况 内存...

    calx 评论0 收藏0
  • 还在用Synchronized?Atomic你了解不?

    摘要:失败重试自旋比如说,我上面用了个线程,对值进行加。我们都知道如果在线程安全的情况下,这个值最终的结果一定是为的。那就意味着每个线程都会对这个值实质地进行加。 前言 只有光头才能变强 之前已经写过多线程相关的文章了,有兴趣的同学可以去了解一下: https://github.com/ZhongFuCheng3y/3y/blob/master/src/thread.md showImg(h...

    陈江龙 评论0 收藏0
  • Java中的四种引用(强引用、软引用、弱引用、虚引用)

    摘要:在之后,对引用的概念进行了扩充,将引用分为强引用软引用弱引用虚引用种,这种引用强度依次逐渐减弱。软引用是用来描述一些还有用但并非必需的对象。虚引用也称为幽灵引用或者幻影引用,它是最弱的一种引用关系。 以下内容摘自《深入理解Java虚拟机 JVM高级特性与最佳实践》第2版,强烈推荐没有看过的同学阅读,读完的感觉就是原来学的都是些什么瘠薄东西(╯‵□′)╯︵┴─┴ 在JDK1.2以前,Ja...

    wwolf 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<