欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

简述java垃圾回收器GC原理

程序员文章站 2022-04-16 16:33:11
垃圾回收器GC机制基本规则主要针对: 堆内存的垃圾数据回收规则:堆内存中的对象,在没有任何引用指向该对象的情况下,被GC判定为垃圾数据,此时会被GC回收;...

一、垃圾回收器GC机制基本规则

  • 主要针对: 堆内存的垃圾数据
  • 回收规则:堆内存中的对象,在没有任何引用指向该对象的情况下,被GC判定为垃圾数据,此时会被GC回收;

那JVM具体是通过什么算法判断对象数据是否为垃圾数据呢?这就涉及到了垃圾判断算法

二、垃圾判断算法

①引用计数法

这种算法假设堆内存中的每个对象都有一个引用计数器,当对象被创建初始化后,其引用计数器值设置为1,以后每多一次引用就+1;反之,引用结束则-1,当对象引用计数器值为0时,对象被判定为垃圾数据,可以被收集

  • 优点:引用计数法实现起来比较简单,对程序不被长时间打断的实时环境比较有利。
  • 缺点:需要额外的空间来存储计数器,难以检测出对象之间的循环引用。

②可达性分析法(JVM中使用的正是这个)

Java中,是通过可达性分析(Reachability Analysis)来判定对象是否存活的。该算法的基本思路就是通过一些被称为引用链(GC Roots)的对象作为起点,从这些节点开始向外搜索,搜索走过的路径被称为(Reference Chain),当一个对象到GC Roots没有任何引用链相连时(即从GC Roots节点到该节点不可达),则证明该对象是不可用的。

注:箭头为引用链,蓝色圆圈表示引用它的对象
简述java垃圾回收器GC原理
优点:可以解决循环引用的问题,不需要占用额外的空间
缺点:多线程场景下,其他线程可能会更新已经访问过的对象的引用

  • 在Java中,可作为GC Root的对象包括以下几种:
  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象

  2. 方法区中类静态属性引用的对象

  3. 方法区中常量引用的对象

  4. 本地方法栈中JNI(即一般说的Native方法)引用的对象

三、垃圾回收器的线程特性

垃圾回收(GC)线程与应用线程保持相对独立,当系统需要执行垃圾回收任务时,先停止工作线程,然后命令 GC 线程工作。以串行模式工作的收集器,称为Serial Collector,即串行收集器;与之相对的是以并行模式工作的收集器,称为Paraller Collector,即并行收集器。

既然是简述,点到为止!
~END

本文地址:https://blog.csdn.net/King_of_peas/article/details/107550249