简单了解JVM垃圾回收器(GC和GC Tuning)

单词理解

GC:垃圾回收

GC Tuning:垃圾回收机制

垃圾:没有任何引用指向的一个对象或者多个对象,或没有根指向的循环引用。

如何定位为垃圾?通过以下两种算法:

  1. 引用计数

  2. 根可达算法

常见的垃圾回收算法:

1.标记清楚法:两边扫描,第一遍将垃圾进行标记,第二遍清除垃圾

特点:位置不连续 产生碎片 效率偏低

2.拷贝算法:将非垃圾文件拷贝到另外一个内存当中,再清除原有内存内容

特点:没有碎片,浪费空间

3.标记压缩:两遍扫描,第一遍和标记清楚类似找出非垃圾的对象,第二遍调整指针,集中非垃圾对象并清除垃圾

特点:两遍扫描,效率偏低,需要进行线程同步,对线程要求高,单线程效率低,没有碎片

4.分代算法:将内存分为年轻代以及老年代,再结合以上三种算法进行垃圾回收

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

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

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

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

分代算法

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

    1. 永久代 元数据 - Class

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

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

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

  2. 新生代 = Eden + 2个suvivor区

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

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

    3. 再次YGC,eden + s1 -> s0

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

    5. s区装不下 -> 老年代

  3. 老年代

    1. 顽固分子

    2. 老年代满了FGC Full GC

  4. GC Tuning (Generation)

    1. 尽量减少FGC

    2. MinorGC = YGC

    3. MajorGC = FGC

常见的垃圾回收器(连线的即为可以组合使用的)

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

  2. Serial 年轻代 串行回收

  3. PS 年轻代 并行回收

  4. ParNew 年轻代 配合CMS的并行回收

  5. SerialOld

  6. ParallelOld

  7. ConcurrentMarkSweep 老年代 并发的, 垃圾回收和应用程序同时运行,降低STW的时间(200ms) CMS问题比较多,所以现在没有一个版本默认是CMS,只能手工指定 CMS既然是MarkSweep,就一定会有碎片化的问题,碎片到达一定程度,CMS的老年代分配对象分配不下的时候,使用SerialOld 进行老年代回收 想象一下: PS + PO -> 加内存 换垃圾回收器 -> PN + CMS + SerialOld(几个小时 - 几天的STW) 几十个G的内存,单线程回收 -> G1 + FGC 几十个G -> 上T内存的服务器 ZGC 算法:三色标记 + Incremental Update

  8. G1(10ms) 算法:三色标记 + SATB

  9. ZGC (1ms) PK C++ 算法:ColoredPointers + LoadBarrier

  10. Shenandoah 算法:ColoredPointers + WriteBarrier

 

引用文章:

什么是GC? 什么是GC Tuning,怎么做?_丿烂人丶的博客-CSDN博客_oracle数据库gc是什么

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值