JVM垃圾收集器【如何找到垃圾、清除垃圾的算法、垃圾回收器】

63 阅读1分钟

@TOC

转自《极客时间》

GC基本原理

垃圾回收

如果不进行垃圾收集,内存数据很快就会被占满 理论计算: 计算题:256byte * 400w / 1024 /1024 = 976.5625 MB 400百万256byte请求 约等于对象 1GB

什么是垃圾?

在这里插入图片描述

如何找到这个垃圾?

引用计数法和根可达算法

1)引用计数法(Reference Counting)

通过引用计数方法,找到这个垃圾 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

2)根可达算法(GCRoots Tracing)

在这里插入图片描述

3)回收过程

在这里插入图片描述

4)对象引用

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

清除垃圾的算法

JVM提供3种方法,清除垃圾对象:

  1. Mark-Sweep 标记清除算法
  2. Copying 拷贝算法
  3. Mark-Compact 标记压缩算法

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

垃圾回收器

在这里插入图片描述

串行收集器

Serial

在这里插入图片描述

Serial Old

在这里插入图片描述

并行收集器

Parallel Scavenge【吞吐量优先 用与并行,复制算法】

在这里插入图片描述

Parallel Old

在这里插入图片描述 在这里插入图片描述

ParNew收集器

在这里插入图片描述 在这里插入图片描述

CMS收集器【用户线程并行】

在这里插入图片描述 在这里插入图片描述

G1(Garbage-First)收集器

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

ZGC(Z Garbage Collector)

在这里插入图片描述 在这里插入图片描述