JVM高级特性-垃圾收集之判断对象存活算法

Posted onlinemf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM高级特性-垃圾收集之判断对象存活算法相关的知识,希望对你有一定的参考价值。

一、概述

  运行时数据区中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭的

  因此,他们的内存分配和回收是确定的,在方法或线程结束时就回收。而Java堆和方

  法区则是不确定的,程序运行过程中创建对象的大小是不定的,只有在程序处于运行

  期才能知道所需内存的大小

 

二、“存活算法”

  要判断对象是否存活,主要有两种算法:引用计数法和可达性分析算法

  • 引用计数法

    引用计数法就是给对象加上一个引用计数器,每当对象被 引用一次

  计数器值就加1,引用时效则减1,计数器为0则表示不会再被使用。

 

  • 可达性分析算法

    可达性分析算法是主流的实现,这个算法通过成为GC ROOT的节点作为根节点,

  从此根节点向下搜索,若对象到GC ROOT没有引用链相连(即不可达)时,表示该

  对象不可用

    可作为GC ROOT的对象为:

      • 虚拟机栈中本地变量表里的引用对象
      • 方法去中的类静态属性引用独享
      • 方法去中的敞亮对象
      • 本地方法中的引用对象

   目前可达性分析算法已是主流算法,原因是,引用计数器算法无法解决对象互相引用的问题            

    

以上是关于JVM高级特性-垃圾收集之判断对象存活算法的主要内容,如果未能解决你的问题,请参考以下文章

JVM高级特性与实践:对象存活判定算法(引用) 与 回收

JVM-垃圾收集算法垃圾收集器内存分配和收集策略

JVM——四种垃圾收集算法详解

Spark学习之路 (十四)SparkCore的调优之资源调优JVM的GC垃圾收集器

JVM垃圾收集

JVM之垃圾收集算法(待完成)