zgq105 / blog

2 stars 0 forks source link

java虚拟机-GC机制总结 #63

Open zgq105 opened 5 years ago

zgq105 commented 5 years ago

image

1. 什么是GC机制?作用?

GC机制是java特有的一种垃圾回收机制,管理内存中对象的回收工作。它的作用是减轻程序员的开发工作,不需要程序员手动管理对象的清理回收工作,加快开发效率。

2. 对象引用

2.1 强引用

强引用是指我们开发中默认创建的对象就是强引用;比如,Object obj = new Object()就是一个强引用,只要强引用存在GC就不会回收被引用的对象。(JVM宁可OOM都不会回收强引用的对象)

2.2 软引用

软引用是指当JVM中内存不足的时候,软引用的对象就会被GC回收。

2.3 弱引用

弱引用是比软引用强度更弱些,只要下一次GC回收时,无论内存是否充足,弱引用的对象都会被回收。

2.4 虚引用

虚引用是最弱的一种引用关系,基本是形同虚设。

注:四种引用关系由强到弱依次是强引用>软引用>弱引用>虚引用

3. GC判定算法

3.1 引用计数算法

引用计数算法是指每当一个地方引用到该对象时,计数器就会加1,;当引用失效时,计数器就会减1。 优点:

缺点:

3.2 可达性分析算法

可达性分析算法(根搜索算法)指通过GCRoots对象作为起始点,开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GCRoots没有任何引用链相连时,则证明此对象是不可用的。 image 优点:

缺点:

知识点补充,GC-Root对象包括以下几个区域的对象:

  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象。
  2. 本地方法栈(Native)中引用的对象。
  3. 方法区中的静态变量和常量池中引用的对象。

4. GC收集算法

4.1 标记-清除算法

标记-清除算法分为标记阶段和清除阶段。标记阶段主要采用可达性分析算法标记出可回收的对象;而清除阶段就是对标记过的对象进行清除。 image 优点:

缺点:

4.2 复制算法

将可用内存按照容量分为大小相等的两份,每次分配内存只使用其中的一块。当这一块内存用完了之后,将还存活的对象复制到另一块去,然后一次性回收这块内存区域。 image 优点:

缺点:

缺点: