学习笔记JVM篇(四)

垃圾回收器

说完垃圾回收算法接下来就需要对应的垃圾回收器去回垃圾回收器。接下来介绍几种垃圾回收器

1、Serial

串行回收器,是单线程版本,暂停所有的应用。在单CPU的情况下效率是很高的,因为不涉及线程的上下文切换。适用于小型程序和客户端应用,不太适合Java Web。Serial使用的垃圾回收算法是,新生代:复制算法;老年代:标记整理

2、ParNew:

作用于新生代的,在Serial的基础上改为了多线程版本,使用多个线程进行垃圾回收。适用于大型应用和Web 程序,在单核CPU的效率比Serial效率低,因为涉及到了线程的上下文切换。

3、Parallel

全称 Parallel Scavenge是一种多线程的收集器,和ParNew收集器类似,是一个新生代的

4、Parallel Old

是Parallel的老年代版本

5、CMS(Concurrent Mark Sweep)

是一种并发的垃圾回收器,用的是标记-清除法。(JDK11之后被废弃了),用于老年代的垃圾回收。停顿时间比较短。过程如下

  1. 初始标记:标记与GCRoot直接关联的的对象(注意是直接关联,间接的不会被标记),此时会触发STW。
  2. 并发标记:与用户线程并发,这里是从与GCRoot直接关联的对象开始扫描,而不是从GCRoot开始。
  3. 重新标记:会触发STW,因为第二步可能会导致一些对象错标或者漏标。
  4. 并发清除:与用户线程并发
6、新一代垃圾回收器G1

全称Garbage First,在不同区域分配垃圾回收。G1垃圾回收器保留了分代思想,但是取消了新生代和老年代的物理划分,把内存分为多个区域(Region),区域中的逻辑包含了新生代和老年代。区域是动态变化的,原先是老年代的区域,在之后可能会变成新生代,实现更精细化的内存划分。

G1整体采用标记整理算法,局部采用标记复制算法,所以不会产生内存碎片。G1垃圾回收器会把内存分为大约2048个区域(Region)。

同时新增了名为Humongous的内存区域用于存储大对象,如果一个H区域装不下则G1会查询连续的H区域去存储该对象,为了找到连续的空间可能会触发Full GC。

G1提供了三种模式的垃圾回收模式:

  1. Young GC:与其它垃圾回收器不同,其他垃圾回收器是当Eden区满了触发Young GC 而G1则是会预测Eden区回收要多久,如果接近参数配置的时间则会触发Young GC。回收的算法是采用标记复制算法。
  2. Mix GC :混合GC,多数对象晋升到老年代后,为了避免内存耗尽会触发Full GC,回收整个Young Region和部分的Old Region。触发条件当老年代对象占比超过阈值(可配置)
  3. Full GC:对老年代进行垃圾回收,采用标记、清除、压缩相对来说比较耗时。

总结:在Yong GC和Mix GC模式下,G1会对每个Region存活对象进行统计。根据存活对象和闲置的Region数量动态的决定垃圾回收的区域和顺序。这种动态策略可以尽可能的减少Full GC。过程如下:

相关推荐
Zhao-Jichao2 小时前
AI Prompting for Everyone 课程笔记 - P21 总结 Conclusion
人工智能·笔记
欢欢李2 小时前
【LTE L3 笔记 05】LTE同步信号
笔记·无线通信·物理层·lte·空口协议
La Pulga4 小时前
【FreeRTOS源码学习笔记】空闲任务与阻塞延时
笔记·mcu·学习·嵌入式·freertos·实时操作系统
蒸蒸yyyyzwd4 小时前
秋招学习笔记 day106
笔记·学习
小李不想当小白5 小时前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
欢欢李6 小时前
【LTE L3 笔记 04】LTE帧结构
笔记·无线通信·物理层·lte·空口协议
Zhao-Jichao8 小时前
AI Prompting for Everyone 课程笔记 - P20 实验与期末项目 Lab and Final Project
前端·人工智能·笔记
lisw059 小时前
作为人类代理的大语言模型及其角色分类!
人工智能·学习·语言模型
Z21-X9 小时前
云原生运维实战笔记:企业网站综合上云部署与云运维服务全景解析
运维·笔记·学习·云原生
坤坤子吖9 小时前
Linux网络编程:UDP进阶,从字典服务器到简单聊天室
linux·服务器·网络·c++·笔记·学习