学习笔记JVM篇(四)

embedded/2024/9/23 11:13:45/

垃圾回收器

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

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.ppmy.cn/embedded/113832.html

相关文章

nodejs桌面消息通知

node-notifier是一个跨平台的桌面消息通知包。 安装 # npm npm i node-notifier # yarn yarn add node-notifier 基本使用 const notifier require("node-notifier");// 基本通知 notifier.notify({title: "标题",message: "消息",sound: …

[数据集][目标检测]无人机飞鸟检测数据集VOC+YOLO格式6647张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):6647 标注数量(xml文件个数):6647 标注数量(txt文件个数):6647 标注…

nodejs 007:错误npm error Error: EPERM: operation not permitted, symlink

完整错误信息 npm error Error: EPERM: operation not permitted, symlink npm warn cleanup Failed to remove some directories [ npm warn cleanup [ npm warn cleanup C:\\Users\\kingchuxing\\Documents\\IPFS\\orbit-db-set-master\\node_modules\\ipfs-cli, npm…

[C++进阶[六]]list的相关接口模拟实现

1.前言 本章重点 在list模拟实现的过程中&#xff0c;主要是感受list的迭代器的相关实现&#xff0c;这是本节的重点和难点。 2.list接口的大致框架 list是一个双向循环链表&#xff0c;所以在实现list之前&#xff0c;要先构建一个节点类 template <class T> struct L…

HTTPS是如何保证安全传输的

我们都知道https是保证安全传输的&#xff0c;那么究竟是如何保证的呢&#xff1f; 答&#xff1a;通过使⽤对称加密、⾮对称加密、数字证书等⽅式来保证数据的安全传输。 下面&#xff0c;就让我们来详细了解一下&#xff0c;具体是如何做的&#xff1a; 客户端向服务端发送数…

PPT技巧:如何在幻灯片中生成目录?

PPT文件如何制作目录&#xff0c;如何点击目录标题立即跳转到相应幻灯片&#xff1f;今天小奥超人和大家一起来学习一下。 现在幻灯片里制作好目录页&#xff0c;制作好目录之后&#xff0c;选中一个目录&#xff0c;点击插入 – 链接 在插入链接界面中&#xff0c;选择【本文…

前端项目优化:极致最优 vs 相对最优 —— 深入探索与实践

在前端开发的广阔天地中&#xff0c;项目优化是每位开发者不可回避的课题。随着Web应用的复杂度和用户需求的不断提升&#xff0c;如何在保证用户体验的同时&#xff0c;提升页面加载速度、降低资源消耗、增强应用的稳定性和可维护性&#xff0c;成为了前端优化的核心目标。在这…

[项目][WebServer][CGI Task]详细讲解

目录 0.CGI程序主要干什么&#xff1f;1.数据处理2.任务处理 0.CGI程序主要干什么&#xff1f; CGI数据处理主要由外部CGI程序负责&#xff0c;HttpServer只负责将拿到的参数交给CGI程序 即&#xff1a;CGI程序既需要数据处理又需要任务处理&#xff0c;最后将结果传递回HttpS…