当前位置: 首页 > article >正文

学习笔记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。过程如下:


http://www.kler.cn/news/316779.html

相关文章:

  • python教程修订版
  • Redis 集群策略详解
  • oracle查询历史操作记录
  • 行为型设计模式的全面解析
  • 中小企业体系技术抽象沉淀-异地灾备篇
  • Android中如何调用DLL文件
  • 通信工程学习:什么是VM虚拟机
  • 在交互式系统中,非剥夺是不是一个好的策略?为什么?
  • kettle从入门到精通 第八十六课 ETL之kettle kettle调用https接口忽略SSL校验
  • 设计原则模式概览
  • Java项目实战II基于Java+Spring Boot+MySQL的房屋租赁管理系统的设计与实现
  • 编写webpack插件自动上传sourceMap
  • MySQL高阶1831-每天的最大交易
  • 通过spring-boot创建web项目
  • 数据爬虫中遇到验证码的解决方法
  • 3 pyqt5 Layout布局(保证主界面缩放各组件也对应缩放)== 主要有Qt Designer和完全代码设置两种设计方式(根据自己情况选择即可)
  • 类中的特殊内容
  • 高效高质量SCI论文撰写及投稿
  • 聊聊AUTOSAR:基于Vector MICROSAR的TC8测试开发方案
  • 使用SpringCloud构建可伸缩的微服务架构
  • Matplotlib在运维开发中的应用
  • Java设计模式—面向对象设计原则(六) ----->合成复用原则(CRP) (完整详解,附有代码+案例)
  • MySQL篇(事务 - 基础)
  • 华为高级交换技术笔记 2024-2025
  • 【小白向】怎么去除视频水印?HitPaw帮你轻松解决
  • springboot系列--web相关知识探索一
  • GUI编程之MATLAB入门详解(01)
  • git删除本地+远程提交记录
  • Android IME输入法启动显示隐藏流程梳理
  • Java工厂模式