OpenJDK 12 ZGC源码分析
OpenJDK 12 ZGC垃圾回收器源码分析
860MHz
这个作者很懒,什么都没留下…
展开
-
OpenJDK ZGC 源码分析(一)概览
1. 前言G1是JDK中最新最成熟的垃圾回收器,其稳定性和性能得到了广泛的认可。但是,一方面随着硬件的发展,堆空间越来越大,几十GB、上百GB的内存在生产环境逐渐出现;另一方面,对于停顿时间的需求日益严苛,从最初的秒级到百毫秒级,再到十毫秒级和毫秒级。G1对于这种情况逐渐力不从心,下一代低延迟垃圾回收器主要有ZGC和Shenandoah。本文将详细介绍ZGC相关原理。2. 历史Oracle在...原创 2019-08-07 14:40:27 · 1294 阅读 · 0 评论 -
OpenJDK ZGC 源码分析(二)触发GC的时机
1. 简介ZGC的回收周期触发时机与其他GC算法略有不同,VM内部有个线程轮询定期检查是否满足开始回收的条件,如果满足则开始回收。ZGC提供四种策略,其中一种满足条件即触发回收:rule_timer,定时策略,距离上次GC时间超过interval即触发GCrule_warmup,VM启动后,如果从来没有发生过GC,则在堆内存使用超过10%、20%、30%时,分别触发一次GC,以收集GC数...原创 2019-08-08 12:22:10 · 1025 阅读 · 0 评论 -
OpenJDK ZGC 源码分析(三)内存管理
1. 简介ZGC与传统GC不同,标记阶段标记的是指针(colored pointer),而非传统GC算法中的标记对象。ZGC借助内存映射,将多个地址映射到同一个内存文件描述符上,使得ZGC回收周期各阶段能够使用不同的地址访问同一对象。本文将详细介绍ZGC的内存管理。2. 代码分析2.1 指针结构目前ZGC仅支持Linux/x64,指针是64位的,ZGC重新定义了指针结构。zGlobal...原创 2019-08-13 14:48:48 · 1085 阅读 · 0 评论 -
OpenJDK ZGC 源码分析(四)分页
1. 简介与G1的分区类似,ZGC将堆划分成Page进行管理,不同的是ZGC中Page大小不是固定的,而是分为三种Small、Medium、Large三类。本文将详细介绍ZGC的分页机制。2. 代码分析2.1 Page的类型ZGC有3种不同的页面类型:小型(2MB),中型(32MB)和大型(2MB的倍数)。zGlobals_linux_x86.hppconst size_t Z...原创 2019-08-14 09:57:27 · 430 阅读 · 0 评论 -
OpenJDK ZGC 源码分析(五)对象分配
1. 简介ZGC的对象分配流程大体与G1类似。分配流程图在JVM G1 源码分析(二)- 对象的堆空间分配内。主要代码在src/hotspot/share/gc/shared目录下,为多个GC算法的共用代码。ZGC定制逻辑由gc shared代码调用ZCollectedHeap、ZHeap等ZGC派生类实现。2. 源码分析2.1 allocate_new_tlab当线程的TLAB可用内...原创 2019-08-15 09:44:08 · 477 阅读 · 0 评论 -
OpenJDK ZGC 源码分析(六)GC回收
1. 简介GC回收周期大体如下图所示:GC回收周期包括如下11个子阶段:phase 1:初始标记,需要STWphase 2:并发标记phase 3:标记结束,需要STWphase 4:并发处理软引用、弱引用phase 5:并发重置Relocation Setphase 6:并发销毁可回收页phase 7:内存验证phase 8:并发选择Relocation Setphas...原创 2019-08-16 09:56:18 · 938 阅读 · 0 评论