JVM-GC-基础知识

JVM-GC-基础知识

前言

JVM中的GC使用Root Searching寻找垃圾单独方式,并结合mark-sweep、copying、mark-compact三种清除算法形成了各有特点的垃圾回收器,且垃圾回收器的演变过程是因为内存空间的不断增大的必然原因。

JVM-GC的发展史

JVM垃圾回收分为两个时代:一个是内存分代模型的垃圾回收器时代,一个是内存不分代回收器时代。

  1. 内存分代模型:将内存分为新生代、老年代,刚刚创建的对象优先向新生代分配,多少轮垃圾回收后没有被回收的对象放入老年代。
  2. 分代的原因:让经过好几轮垃圾回收没有被回收的对象减少扫描次数,提高回收效率。
  3. 年轻代使用copy算法(YGC):年轻代将内存分为三部分,eden(伊甸)、survivor1、survivor2,内存占比为8:1:1。在回收的时候先扫描eden区将剩下的对象放入到survivor1,然后再次扫描时候将eden区和survivor1同时扫描,扫描后剩下的对象放入survivor2,清除survivor1,下次就扫描eden和survivor2将剩下的对象放入survivor1,依次循环;
  4. 老年代使用make算法(FGC): 当老年代分区内存满后触发FGC,一般设置80%-90%的总内存触发GC

STW

全称stop the word,它表示在垃圾回收线程启动时,其他线程全部停止工作。

JVM的十种GC

分代时期的GC

分代时期的GC,基本是分为三组使用

Serial+Serial Old

这两种在JVM初期使用,内存空间较小,一般是几兆-几十兆,可以使用copying算法且单线程

  1. Serial:年轻代、STW、单线程、copying算法
  2. Serial Old:老年代、STW、单线程、mark-sweep-compact算法
Parallel Scavenge + Parallel Old

由于内存不断增大,一般是几十兆-1G,需要多线程清理垃圾。简称:PS+PO,是JDK1.8的默认垃圾回收器

  1. Parallel Scavenge: 年轻代、STW、多线程、make-sweep和copying算法
  2. Parallel Old: 老年代、STW、多线程 make-compact算法
PerNew + CMS

由于内存空间不断增大,一般1G-几十G,这是垃圾回收器的一个里程碑,使用concurrent sweep方式,并发清除,业务线程和GC线程可以同时运行。

  1. PerNew:年轻代、STW、多线程、copying垃圾回收器,是Parallel Scavenge垃圾回收器的升级用来配合CMS使用
  2. CMS(concurrent mark sweep):老年代、非STW、多线程、mark-sweep垃圾回收器,使用了著名的三色标记算法

分代时期的GC

G1、ZGC、Shenandoah、Epsilon,需要注意的是G1是逻辑分代,物理不分。

GC的实现算法

  1. CMS:三色标记算法 + 增量更新(incremental update)
  2. G1: 三色标记算法 + SATB(snapshot-at-the-beginning)
  3. ZGC:颜色指针 + 写屏障
  4. Shenandoah:颜色指针 + 读屏障

常见的垃圾回收器参数设定

#使用Serial + Serial Old
-XX:+UseSerialGC
#使用ParNew + Serial Old,不推荐使用
-XX:+UseParNewGC
#使用ParNew + CMS + Serial Old
-XX:+UseConcMarkSweepGC
#使用Parallel Scavenge + Parallel Old,这是jdk1.8默认垃圾回收器
-XX:+UseParalleGC
-XX:+UseParalleOldGC
#使用G1垃圾回收器,jdk1.9开始默认使用
-XX:+UseG1

相关推荐

  1. JVM-GC-基础知识

    2024-06-16 13:54:05       8 阅读
  2. jvm基础知识总结

    2024-06-16 13:54:05       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-16 13:54:05       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-16 13:54:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-16 13:54:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-16 13:54:05       18 阅读

热门阅读

  1. 差分,LeetCode 2779. 数组的最大美丽值

    2024-06-16 13:54:05       9 阅读
  2. Oracle锁机制之分类和死锁

    2024-06-16 13:54:05       8 阅读
  3. Web前端收入来源:探索多元化的盈利渠道

    2024-06-16 13:54:05       5 阅读
  4. yolov10 学习笔记

    2024-06-16 13:54:05       7 阅读
  5. js面试题

    2024-06-16 13:54:05       6 阅读
  6. ndk-build

    2024-06-16 13:54:05       6 阅读
  7. AI学习指南机器学习篇-KNN基本原理

    2024-06-16 13:54:05       7 阅读
  8. XML XSLT:技术与应用解析

    2024-06-16 13:54:05       5 阅读