位置:首页 > 后端 > java

JVM性能调优之GC

chenlong 发布:2021-10-30 17:35:54阅读:

1.什么是垃圾

没有任何引用指向的一个对象或者多个对象(循环引用)

image.png


2.如何定位垃圾

(1)引用计数(ReferenceCount)

438285333595351bb128e705a5bb43b40a778ce310ff841f0acb5a2371878f7cb.png


(2)根可达算法(RootSearching)

引用循环,找不到的都是垃圾


3.常见的垃圾回收算法

标记清除(mark sweep) - 位置不连续 产生碎片 效率偏低(两遍扫描)

拷贝算法 (copying) - 没有碎片,浪费空间

标记压缩(mark compact) - 没有碎片,效率偏低(两遍扫描,指针需要调整)


4.JVM内存分代模型(用于分代垃圾回收算法)

gc2.png


(1)部分垃圾回收器使用的模型

除Epsilon ZGC Shenandoah之外的GC都是使用逻辑分代模型


G1是逻辑分代,物理不分代


除此之外不仅逻辑分代,而且物理分代


(2)新生代 + 老年代 + 永久代(1.7)Perm Generation/ 元数据区(1.8) Metaspace

永久代 元数据 - Class

永久代必须指定大小限制 ,元数据可以设置,也可以不设置,无上限(受限于物理内存)

字符串常量 1.7 - 永久代,1.8 - 堆

MethodArea逻辑概念 - 永久代、元数据


(3)新生代 = Eden + 2个suvivor区

YGC回收之后,大多数的对象会被回收,活着的进入s0

再次YGC,活着的对象eden + s0 -> s1

再次YGC,eden + s1 -> s0

年龄足够 -> 老年代 (15 CMS 6)

s区装不下 -> 老年代


(4)老年代

顽固分子

老年代满了FGC Full GC


(5)GC Tuning (Generation)

尽量减少FGC

MinorGC = YGC

MajorGC = FGC


(6)对象分配过程图


5.常见的垃圾回收器

(1)垃圾回收器的发展路线,是随着内存越来越大的过程而演进

从分代算法演化到不分代算法

Serial算法 几十兆

Parallel算法 几个G

CMS 几十个G - 承上启下,开始并发回收 -

.- 三色标记 -


(2)JDK诞生 Serial追随 提高效率,诞生了PS,为了配合CMS,诞生了PN,CMS是1.4版本后期引入,CMS是里程碑式的GC,它开启了并发回收的过程,但是CMS毛病较多,因此目前任何一个JDK版本默认是CMS

并发垃圾回收是因为无法忍受STW


(3)Serial 年轻代 串行回收


(4)PS 年轻代 并行回收


(5)ParNew 年轻代 配合CMS的并行回收


(6)SerialOld


(7)ParallelOld


(8)ConcurrentMarkSweep 老年代 并发的, 垃圾回收和应用程序同时运行,降低STW的时间(200ms)

CMS问题比较多,所以现在没有一个版本默认是CMS,只能手工指定

CMS既然是MarkSweep,就一定会有碎片化的问题,碎片到达一定程度,CMS的老年代分配对象分配不下的时候,使用SerialOld 进行老年代回收

想象一下:

PS + PO -> 加内存 换垃圾回收器 -> PN + CMS + SerialOld(几个小时 - 几天的STW)

几十个G的内存,单线程回收 -> G1 + FGC 几十个G -> 上T内存的服务器 ZGC

算法:三色标记 + Incremental Update


(9)G1(200ms - 10ms)

算法:三色标记 + SATB


(10)ZGC (10ms - 1ms) PK C++

算法:ColoredPointers + LoadBarrier


(11)Shenandoah

算法:ColoredPointers + WriteBarrier


(12)Eplison


(13)PS 和 PN区别的延伸阅读:

▪https://docs.oracle.com/en/java/javase/13/gctuning/ergonomics.html#GUID-3D0BB91E-9BFF-4EBB-B523-14493A860E73


(14)垃圾收集器跟内存大小的关系

- Serial 几十兆

- PS 上百兆 - 几个G

- CMS - 20G

- G1 - 上百G

- ZGC - 4T - 16T(JDK13)


1.8默认的垃圾回收:PS + ParallelOld



24人点赞 返回栏目 提问 分享一波

小礼物走一波,支持作者

还没有人赞赏,支持一波吧

留言(问题紧急可添加微信 xxl18963067593) 评论仅代表网友个人 留言列表

暂无留言,快来抢沙发吧!

本刊热文
网友在读
手机扫码查看 手机扫码查看