`

判断对象是否存活的算法

 
阅读更多

         许多教科书来判断对象师傅偶存活的算法是这样的:给对象添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1;当引用失效时,计数器的值就减1;任何时刻计数器为0的对象就是不可能再被使用的。

           上面这个算法叫做“引用计数算法”,实现简单,判定效率高昂,但是无法解决对象之间相互循环引用的问题。

例如:

           MyClass referenceA=new MyClass();

           MyClass referenceB=new MyClass();

           referenceA.instance=referenceB;

           referenceB.instance=referenceA;

 

           referenceA=null;

           referenceB=null;

           System.gc();

以上代码执行之后,虚拟机并没有因为这两个对象相互引用就不回收他们,说明虚拟机不是通过引用计数算法判断对象存活的。

 

其实虚拟机是采用可达性分析算法来判断对象死活的。

例如:



 

对象object5,object6,object7虽然相互有关联,但是他们到GC ROOTS是不可达的,所以他们将会被判定为是可回收的对象。

分享到:
评论

相关推荐

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第34节垃圾回收-判断对象是否存活算法-可达性分析法详解00:07:09分钟 | 第35节垃圾回收算法-标记清除算法00:04:36分钟 | 第36节垃圾回收算法-复制算法00:14:35分钟 | 第37节垃圾回收算法-标记整理算法和分代收集...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

     第34讲 垃圾回收-判断对象是否存活算法-可达性分析法详解 00:07:09  第35讲 垃圾回收算法-标记清除算法 00:04:36  第36讲 垃圾回收算法-复制算法 00:14:35  第37讲 垃圾回收算法-标记整理算法和分代收集...

    jvm如何判断对象己死详解

    这是JVM实际采用的判断对象存活的标准。该算法从一组称为“GC Roots”的对象开始,包括虚拟机栈中的局部变量表引用的对象、方法区中类静态属性引用的对象、方法区中常量引用的对象以及本地方法栈中JNI引用的对象。...

    垃圾回收相关算法.pdf

    它通过从一组称为GC Roots的对象开始,遍历整个引用链,判断对象是否可达。如果对象无法从GC Roots到达,那么它就是不可达的,可以被视为垃圾。GC Roots包括虚拟机栈中引用的对象、本地方法栈内的JNI引用、方法区的...

    1_Java虚拟机(垃圾收集器和算法).pdf

    在判断常量是否废弃时,如果常量池中的常量没有被任何对象引用,那么它就被认为是废弃常量,可能被垃圾收集器回收。 类的卸载需要满足特定条件,比如该类的所有实例都已被回收,加载该类的ClassLoader已被回收,且...

    GC算法和收集器.pdf

    本文将详细探讨GC算法、判断对象回收条件、垃圾收集器的工作原理及其调优步骤和常用参数。 首先,GC需要判断哪些对象可以被回收。在JVM中,主要有两种算法用来判断对象的生死:引用计数法和可达性分析算法。引用...

    JVM初探- 内存分配、GC原理与垃圾收集器

    JVM采用可达性分析算法来判断对象是否存活。该算法通过一系列被称为GC Roots的对象作为起点,向下搜索,如果一个对象到GC Roots没有任何引用链相连,那么该对象被认为是不可达的,也就是不可用的,从而被回收。值得...

    Java虚拟机垃圾收集算法的研究和改进.pdf

    引用计数算法是通过跟踪记录每个对象被引用的次数来判断是否需要回收,但它不能处理循环引用的问题。标记-清除算法分为标记和清除两个阶段,先标记出所有存活对象,然后清除未被标记的对象。复制算法则是将内存分为...

    分布式垃圾回收算法分析.pdf

    引用计数法通过维护对象引用的计数来判断对象是否存活,而跟踪法则通过建立引用关系图来进行垃圾回收。 分布式垃圾回收涉及的原理更为复杂,它可以从网络层次和分布式协议层次分析。网络层次上,分布式垃圾收集类似...

    JVM性能调优-JVM内存整理及GC回收.pdf

    引用计数算法通过跟踪记录每个对象被引用的次数来判断对象是否应该被回收,但在处理循环引用时存在缺陷。可达性分析清理算法通过标记-清除、复制和标记-整理三个子算法来完成垃圾回收过程。标记-清除算法会留下内存...

    JVM垃圾回收机制

    - 可达性分析算法:这种方法通过确定对象的引用链来判断对象是否可达。GC根对象包括虚拟机栈中引用的对象、方法区中类静态属性引用的对象、方法区中常量引用的对象、本地方法栈中native方法引用的对象。如果一个对象...

    J a v a 堆的管理-垃圾回收机制的算法分析与研究

    - **优点**:能够处理循环引用的问题,更准确地判断对象是否可达。 - **实现**:标记-清除(Mark-Sweep)、标记-压缩(Mark-Compact)等是常见的追踪算法。其中,标记-清除算法会留下大量不可用的小块内存,而标记...

    垃圾回收-GC简单总结.pdf

    1. 引用计数法:该算法通过为对象添加引用计数器来判断对象是否存活。每当一个对象被引用,它的引用计数器就会增加。当引用失效时,计数器减少。当引用计数器为零时,表示对象不再被引用,可以被回收。但是引用计数...

    JVM面试宝典,用30分钟搞明白JVM原理

    12、判断对象是否是垃圾的引用计数法 13、JVM底层可达性分析算法如何找垃圾对象 14、可达性分析算法中不可达的对象还有机会存活吗 15、什么样的类能被回收 16、解释下JVM内部各种垃圾收集算法 17、解释下CMS收集器...

    笔记,2、垃圾回收器和内存分配策略1

    二、判断对象存活的算法 1. 引用计数法:每个对象都有一个计数器,每当有一个引用指向它时,计数器加1,引用消失时减1。当计数器为0时,对象被视为可回收。这种方法简单快速,但在处理循环引用时会出现问题。 2. ...

    最新java面试题(基础部分)

    可以,现在的虚拟机基本都是通过可达性分析算法来判断对象是否存活的,而不是通过简单的引用计数法来判断对象是否存活。可达性分析算法使用一系列的“GC Roots”对象(虚拟机栈中引用的对象、静态属性引用对象)作为...

    JAVA核心知识点整理.pdf

    - 引用计数法:通过记录每个对象被引用的次数来判断对象是否存活。 - 可达性分析:通过一系列称为GC Root的对象作为起始点进行搜索,如果一个对象到GC Root没有任何引用链相连,则证明此对象是不可能再被使用的。 - ...

    JVM垃圾回收与调优详解1

    2. 如何判断对象可以被回收 垃圾回收的目的是回收不再使用的对象所占用的内存。主要有两种判断方法: - 引用计数法:为每个对象添加引用计数器,但这种方法无法处理对象间的循环引用问题,因此在现代JVM中并不常用...

Global site tag (gtag.js) - Google Analytics