美文网首页
JVM之判断对象是否存活的方法

JVM之判断对象是否存活的方法

作者: Skybike | 来源:发表于2019-10-08 10:22 被阅读0次

为什么要判断对象是否存活呢?

虚拟机中几乎所有的对象都要在堆内存中分配存储区域,而如果要进行垃圾回收就得判断哪些对象是”死掉“的,什么情况下可以判断某个对象是“死掉”的呢?当然是这个对象的存在已经对程序做不了任何贡献的时候,也就是说没有任何对象会再使用到这个对象了。

再说一遍,判断对象是否存活是在垃圾回收之前的一步至关重要的事情!

再说一遍,判断对象是否存活是在垃圾回收之前的一步至关重要的事情!

再说一遍,判断对象是否存活是在垃圾回收之前的一步至关重要的事情!

有两种算法可用于判断对象是否存活:

引用计数器算法:

    1:原理:给每个对象添加一个引用计数器,当有一个对象引用它时,就加1,当引用失效时,就减1.当任何对象的引用计数器的值为0时,这个对象就不会在被引用,就会被判定对象已死。DEAD! DEAD! DEAD!

    2:优点:实现简单,判定效率高

    3:缺点:很难解决对象直接循环引用的问题

潜意识告诉我这个算法应该没什么人会用,但其实微软的COM技术,使用ActionScript3的FlashPlayer,Python语言和在游戏脚本领域被广泛使用的Squirrel都使用引用计数器算法来管理内存

可达性分析算法:

首先确定引用根节点,那些对象可以被认为是引用根节点呢????

1:虚拟机栈中局部变量表中引用的对象(什么是虚拟机栈?虚拟机栈存放线程访问的各个方法,什么是局部变量表?局部变量表是虚拟机栈中栈帧【方法】中定义的变量和方法间传递的参数)

2:本地方法栈中native方法引用的对象

3:方法区中静态属性引用的对象(方法区是所有线程共享的,存放各个类的信息,常量,静态变量等)

4:方法区中常量引用的对象

以上面条件选区的GC根节点为初始节点开始向下搜索,跟该节点相关的对象,会在两者之间建立引用链。当其他对象跟根节点由根节点形成的引用链树没有关联时,就可以对这些对象说拜拜

加一条:这些未跟GC根节点相关联的对象,其实并不会在第一次垃圾回收的时候就被回收。会在第一次回收时打个标记,在第二次的垃圾回收时进行回收

相关文章

  • JVM之判断对象是否存活的方法

    为什么要判断对象是否存活呢? 虚拟机中几乎所有的对象都要在堆内存中分配存储区域,而如果要进行垃圾回收就得判断哪些对...

  • JVM之判断对象的存活状态

    jvm垃圾收集器在进行垃圾回收时,会判断对象是否存活状态,只有死去的对象才会被回收。那么怎么判断对象的存活状态呢?...

  • 《深入理解jvm》读书笔记之——判断对象存活的方法

    1、对象的状态 对于jvm中的垃圾收集器中,判断对象是否可以被回收,哪些对象是否需要存活是有以下的方法的。 1.1...

  • JVM对象存活判断

    垃圾回收的三个核心问题: 哪些内存需要回收? 什么时候回收? 如何回收? 一、对象存活判断 1.1、引用计数算法 ...

  • JVM - 判断对象是否存活算法

    在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在堆进行回收前,第一件事情就是要确定这些对象之中哪些还“...

  • JVM--判断对象是否存活

    (1)引用计数法 思想:为每个对象添加一个引用计数器,每当有一个地方引用这个对象时,计数器的值就+1,;当引用失效...

  • Java 垃圾回收机制

    垃圾回收机制 在进行垃圾回收之前,我们需要先判断一个对象是否存活,判断对象是否存活采用了两种方法: 引用计数法 给...

  • 垃圾收集--引用(2)

    根据上篇文章可知垃圾收集--判断对象是否存活 - 简书,判断对象是否存活和“引用”有关。 在JDK...

  • GC算法

    主要关注点: 对象存活判断 GC算法 垃圾回收器 对象存活判断 判断对象是否存活一般有两种方式: 引用计数:每个对...

  • java虚拟机(3)-引用

    判断对象的存活 引用计数法:快,方便,实现简单;缺点:对象相互应用,很难判断对象是否回收 可达性分析 判断对象是否...

网友评论

      本文标题:JVM之判断对象是否存活的方法

      本文链接:https://www.haomeiwen.com/subject/aptjuctx.html