美文网首页JVM
JVM - 判断对象是否存活算法

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

作者: HRocky | 来源:发表于2018-08-21 14:28 被阅读0次

在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象)。

下面介绍两种算法来判断对象是否存活。

1. 引用计数算法

思想:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。

缺点:很难解决对象之间相互循环引用的问题。

主流的Java虚拟机里面没有选用引用计数算法来管理内存。

2. 可达性分析算法

思想:通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。

2.1 可作为GC Roots的对象

在Java语言中,可作为GC Roots的对象包括下面几种:

  • 虚拟机栈(栈帧中的本地变量表)中引用的对象
  • 方法区中类静态属性引用的对象
  • 方法区中常量引用的对象
  • 本地方法栈中JNI(即一般说的Native方法)引用的对象。

相关文章

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

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

  • JVM-垃圾回收算法

    一、对象已死吗? JVM中判断对象是否存活有两种算法:引用计数法、可达性分析算法。 1.引用计数法(Referen...

  • GC算法

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

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

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

  • java的四种引用

    无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象是否引用链可达,判定对象是否存活都和“引用...

  • JAVA的内存分配和垃圾收集1:如何判断一个对象是否是存活的

    对于jvm的内存分配和GC我想从以下顺序来说: 如何判断一个对象是否是存活的。 内存中常用的垃圾回收算法 常见的垃...

  • JVM对象存活判断

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

  • JVM - GC算法

    JVM - GC算法 对象存活判断算法 引用计数法:每个对象内置一个引用计数器,新增引用时,计数器加1,释放引用时...

  • 垃圾收集器与内存分配策略

    对象存活判定算法 引用计数算法虚拟机并不是通过引用计算算法来判断对象是否存活的 可达性分析算法基本思路:通过一系列...

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

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

网友评论

    本文标题:JVM - 判断对象是否存活算法

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