首页 > 代码库 > JVM高级特性-三、垃圾收集之判断对象存活算法

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

一、概述

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

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

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

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

 

二、“存活算法”

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

  • 引用计数法

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

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

 

  • 可达性分析算法

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

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

  对象不可用

    可作为GC ROOT的对象为:

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

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

    

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