当前位置: 移动技术网 > IT编程>开发语言>Java > 简述java垃圾回收器GC原理

简述java垃圾回收器GC原理

2020年07月31日  | 移动技术网IT编程  | 我要评论
垃圾回收器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 Root的对象包括以下几种:
  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象

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

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

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

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

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

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

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网