新一代垃圾回收器 ZGC 设计与实现 阅读笔记 第3章 ZGC 线程

ZGC 后台线程 

    3.1 ZGC的线程

         JavaThread :要执行Java代码的线程

         CompilerThread : 执行JIT的线程

         NameThread : JVM 内部使用的线程

         VMThread :JVM执行垃圾回收的线程

         ConcurrentGCThread :并发执行垃圾回收任务的线程

         GangWorker : 工作线程,有线程池,用于垃圾回收

 3.2 控制线程

       ZDirector : 控制什么时候启动垃圾回收,只有1个线程

      ZDriver : 控制垃圾回收执行的步骤

      ZStat : 收集JVM 运行过程中回收垃圾时各个阶段的数据,同时控制统计信息的输出

3.2.1 时钟触发器

       ZDirector 提供4种时钟触发的方法 :固定时间间隔,预热规则,分配速率,主动触发规则

3.2.2 消息触发

      ZDriver 是通过消息触发执行的

     同步垃圾回收 : 保证垃圾回收一定会发生,并且直到垃圾回收完成才会继续执行。

     异步垃圾回收 :为了实现更高的吞吐量,如果有多个异步消息在同一垃圾回收周期到达,则只有一个请求被处理,垃圾回收只会执行一次。

    ZGC中触发垃圾回收的主要是ZDirector产生的异步消息

3.2.3  VMThread 

         串行执行垃圾回收

        1.进入安全点 : 让待暂停的线程在某一时刻全部暂停

         JDK10 引入 HandShake机制,指定一个目标线程进行暂停,而不是STW 需要暂停全部的应用线程

3.3 工作线程

      真正执行垃圾任务的线程

      并行执行: STW     初始标记,再次标记和转移根对象

      并发执行: 并发标记,非强引用处理,重置转移集,回收无效页面,选择待回收转移集,准备转移,并发转移。

                         可以适当增大并发工作线程的数目

               

     

发布了365 篇原创文章 · 获赞 2 · 访问量 7442

猜你喜欢

转载自blog.csdn.net/kuaipao19950507/article/details/104100393
ZGC