【JVM-垃圾回收器】

一、串行垃圾回收器(SerialGC)

  • 单线程
  • 堆内存较小时,CPU个数少的,适合个人电脑
  • 开启串行垃圾回收器:"-XX:+UseSerialGC=Serial+SerialOld", 复制+老年代(标记加整理算法)

二、吞吐量优先垃圾回收器(并行ParallelGC)

  • 多线程
  • 堆内存较大,多核CPU,适合服务器
  • 让单位时间内,STW时间最短

三、响应时间优先垃圾回收器(CMS)

  • 多线程
  • 堆内存较大,多核CPU,适合服务器
  • 尽可能让单词STW时间最短

四、G1垃圾回收器

  • 定义

Garbage First

2004论文发布

2009 JDK 6u14体验

2012 JDK 7u4 官方支持

2017 JDK9 默认

  • 同时注重吞吐量、低延迟,默认的暂停目标时200ms
  • 超大堆内存,会将堆划分为多大小相等的Region
  • 整体上是标记+整理算法,两个区域之间是复制算法
  • 相关JVM参数如下
  1. G1垃圾回收阶段(young collection开始、循环过程)
  • 第一阶段:Young Collection(新生代)
  • 第二阶段:Young Collection + Concurrent Mark(新生代 + 并发标记)
    • 在Young GC时会进行GC Root的初始标记
    • 老年代占用堆空间比例达到阈值时,进行并发标记(不会STW),Young下面的 JVM参数决定
      -XX:InitiatingHeapOccupancyPercent=percent (默认是45%)
  • 第三阶段:Mixed Collection
    • 会对E、S、O进行全面垃圾回收
    • 最终标记(Remark)会STW
    • 拷贝存活(Evacuation)会STW
      -XX:MaxGCPauseMillis=ms

Full GC

相关推荐
小韩学长yyds11 小时前
JVM 基础 - JVM 内存结构
jvm
oioihoii12 小时前
C++23 已移除特性解析
java·jvm·c++23
怡人蝶梦14 小时前
Java大厂后端技术栈故障排查实战:Spring Boot、Redis、Kafka、JVM典型问题与解决方案
java·jvm·redis·elk·kafka·springboot·prometheus
qx0914 小时前
sqlite3的封装
jvm·数据库·sqlite
煎饼皮皮侠17 小时前
利用aqs构建一个自己的非公平独占锁
java·jvm·aqs
黄雪超21 小时前
JVM——JVM运行时数据区的内部机制是怎样的?
java·开发语言·jvm
好名字更能让你们记住我21 小时前
Linux多线程(六)之线程控制4【线程ID及进程地址空间布局】
linux·运维·服务器·开发语言·jvm·c++·centos
怡人蝶梦1 天前
Java后端技术栈问题排查实战:Spring Boot启动慢、Redis缓存击穿与Kafka消费堆积
java·jvm·redis·kafka·springboot·prometheus
居居飒1 天前
深入理解 JDK、JRE 和 JVM 的区别
java·开发语言·jvm
Bro_cat1 天前
JVM 核心组件深度解析:堆、方法区、执行引擎与本地方法接口
java·jvm