【JVM】JVM垃圾收集器

文章目录

  • 什么是JVM垃圾收集器
  • 四种垃圾收集器(按类型分)
    • 1.串行垃圾收集器(效率低)
    • 2.并行垃圾收集器(JDK8默认使用此垃圾回收器)
    • 3.CMS(并发)垃圾收集器(只针对老年代垃圾回收的)
    • 4.G1垃圾回收器(在JDK9之后默认使用G1)
      • 第一阶段----->Young Collection(年轻代垃圾回收)
      • Young Collection + Concurrent Mark (年轻代垃圾回收+并发标记)
      • 第三阶段----->Mixed Collection (混合垃圾回收,新老都参与)
    • G1和CMS区别

什么是JVM垃圾收集器

垃圾收集器是负责执行垃圾回收的组件,它们用于管理Java程序运行时的内存分配和释放。垃圾收集器的主要任务是自动回收不再使用的内存对象,并将内存空间重新回收以供程序继续使用。

四种垃圾收集器(按类型分)

1.串行垃圾收集器(效率低)

Serial和Serial Old串行垃圾收集器,是指使用单线程进行垃圾回收,堆内存较小,适合个人电脑

  • Serial 作用于新生代,采用复制算法
  • Serial Old 作用于老年代,采用标记-整理算法

垃圾回收时,只有一个线程在工作,并且java应用中的所有线程都要暂停(STW),等待垃圾回收的完成。

在这里插入图片描述

2.并行垃圾收集器(JDK8默认使用此垃圾回收器)

Parallel New和Parallel Old是一个并行垃圾回收器,JDK8默认使用此垃圾回收器

  • Parallel New作用于新生代,采用复制算法
  • Parallel Old作用于老年代,采用标记-整理算法

垃圾回收时,多个线程在工作,并且java应用中的所有线程都要暂停(STW),等待垃圾回收的完成。(通过并行执行垃圾回收以提高性能)

相比较与串行垃圾收集器,并行垃圾收集器无非就是多开写线程来做垃圾回收,其实同样也要暂停所有正在执行的线程,只不过在多个线程并行回收效率比串行高

在这里插入图片描述

3.CMS(并发)垃圾收集器(只针对老年代垃圾回收的)

CMS全称 Concurrent Mark Sweep,是一款并发的、使用标记-清除算法的垃圾回收器,该回收器是针对老年代垃圾回收的,是一款以获取最短回收停顿时间为目标的收集器,停顿时间短用户体验就好

最大特点是在进行垃圾回收时,应用仍然能正常运行。
在这里插入图片描述

4.G1垃圾回收器(在JDK9之后默认使用G1)

G1垃圾收集器的设计目标是在可控的停顿时间实现高吞吐量的垃圾回收。

在这里插入图片描述
在这里插入图片描述

  • 应用于新生代老年代
  • 划分成多个区域每个区域都可以充当 eden,survivor,old, humongous,其中 humongous 专为大对象准备
  • 采用标记整理算法

因为基本上G1主要针对大型堆内存进行垃圾回收,而复制算法在大型堆内存上的应用存在一些挑战和限制。(必须考虑内存空间使用率)

  • 响应时间与吞吐量兼顾

  • 分成三个阶段:新生代回收、并发标记、混合收集(在不同的条件下被触发)
    在这里插入图片描述

  • 如果并发失败(即回收速度赶不上创建新对象速度),会触发 Full GC(尽量避免)

如果对象内存分配速度过快,mixed gc来不及回收,导致老年代被填满,就会触发一次full gc,G1的full gc算法就是单线程执行的serial old gc,会导致异常长时间的暂停时间,需要进行不断的调优,尽可能的避免full gc.

第一阶段----->Young Collection(年轻代垃圾回收)

  • 初始时,所有区域都处于空闲状态

在这里插入图片描述

  • 创建了一些对象,挑出一些空闲区域作为eden区存储这些对象
    在这里插入图片描述
  • 当伊甸园需要垃圾回收时,挑出一个空闲区域作为幸存区(s),用复制算法复制存活对象需要暂停用户线程
    在这里插入图片描述
  • 随着时间流逝,eden区的内存又有不足 将eden区以及之前幸存区中的存活对象,采用复制算法,复制到新的幸存区,其中较老对象晋升至老年代(o)

XX:MaxTenuringThreshold(默认15),计算出一个恰当的任期阈值,凡是超过任期阈值的对象都会被晋升到老年代。
或者幸存区里有大对象,也会直接晋升到老年代(毕竟大对象,复制来复制去影响整体效率)

在这里插入图片描述

Young Collection + Concurrent Mark (年轻代垃圾回收+并发标记)

老年代占用内存超过阈值(默认是45%)后,触发并发标记这时无需暂停用户线程
在这里插入图片描述
并发标记之后,会有重新标记阶段解决漏标问题此时需要暂停用户线程。
这些都完成后就知道了老年代有哪些存活对象,随后进入混合收集阶段。此时不会对所有老年代区域进行回收,而是根据停顿时间目标优先回收价值高(存活对象少)的区域(这也是 Gabage First 名称的由来)。

注意,这个阶段只是做标记,根据重新标记停顿时间来判断哪些老年代里面或的对象少,下一阶段优先对这些回收价值高的老年代来回收
在这里插入图片描述

第三阶段----->Mixed Collection (混合垃圾回收,新老都参与)

混合收集阶段中,参与复制的有 eden、survivor、old

在这里插入图片描述
复制完成,内存得到释放。进入下一轮的新生代回收、并发标记、混合收集

G1和CMS区别

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/72205.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CTF-web】备份是个好习惯(查找备份文件、双写绕过、md5加密绕过)

题目链接:https://ctf.bugku.com/challenges/detail/id/83.html 经过扫描可以找到index.php.bak备份文件,下载下来后打开发现是index.php的原代码,如下图所示。 由代码可知我们要绕过md5加密,两数如果满足科学计数法的形式的话&a…

MySQL索引(Index)

Index 数据库中的索引(Index)是一种数据结构,用于提高数据库查询性能和加速数据检索过程。索引可以看作是数据库表中某个或多个列的数据结构,类似于书中的目录,可以帮助数据库管理系统更快地定位和访问数据。它们是数…

Linux下Docker安装及卸载

文章目录 Linux下Docker安装及卸载1 Docker安装及卸载1.1 安装前准备1.2 安装docker软件2.4.3 启动docker2.2.4 测试2.2.5 卸载 Linux下Docker安装及卸载 1 Docker安装及卸载 官方网址:https://docs.docker.com/engine/install/centos/ 1.1 安装前准备 确定你是C…

常见的Web安全漏洞有哪些,Web安全漏洞常用测试方法介绍

Web安全漏洞是指在Web应用程序中存在的可能被攻击者利用的漏洞,正确认识和了解这些漏洞对于Web应用程序的开发和测试至关重要。 一、常见的Web安全漏洞类型: 1、跨站脚本攻击(Cross-Site Scripting,XSS):攻击者通过向Web页面注入…

openGauss学习笔记-42 openGauss 高级数据管理-触发器

文章目录 openGauss学习笔记-42 openGauss 高级数据管理-触发器42.1 语法格式42.2 参数说明42.3 示例 openGauss学习笔记-42 openGauss 高级数据管理-触发器 触发器会在指定的数据库事件发生时自动执行函数。 42.1 语法格式 创建触发器 CREATE TRIGGER trigger_name { BEFORE…

QString常用函数介绍

此篇博客核心介绍QT中的QString类型的常用函数,介绍到的函数均从帮助手册或其他博客中看到 QString 字符串类 Header: #include qmake: QT core 一、QString字符串转换 1、QString类字符串转换为整数 int toInt(bool *ok Q_NULLPTR, int base 10) cons…

一起创建Vue脚手架吧

目录 一、安装Vue CLI1.1 配置 npm 淘宝镜像1.2 全局安装1.3 验证是否成功 二、创建vue_test项目2.1 cmd进入桌面2.2 创建项目2.3 运行项目2.4 查看效果 三、脚手架结构分析3.1 文件目录结构分析3.2 vscode终端打开项目 一、安装Vue CLI CLI:command-line interface…

一次Linux中的木马病毒解决经历(6379端口---newinit.sh)

病毒入侵解决方案 情景 最近几天一直CPU100%,也没有注意看到了以为正常的服务调用,直到腾讯给发了邮件警告说我的服务器正在入侵其他服务器的6379端口,我就是正常的使用不可能去入侵别人的系统的,这是违法的. 排查 既然入侵6379端口,就怀疑是通过我的Redis服务进入的我的系统…

MySQL的安装以及卸载

下载官网 https://www.mysql.com/ 切到下载tab页 找到 MySQL Community Server 或者 MySQL Community (GPL) Downloads --> MySQL Community Server 点击download按钮: 点击download进入下载页面选择No thanks, just start my download就可以开始下载了。 下…

Android3:布局

一。线性布局 创建项目Linear Layout Example activity_main.xml <?xml version"1.0" encoding"utf-8"?><LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"an…

足部IMU在复杂场景中行走定位

随着微机电系统&#xff08;MEMS&#xff09;技术的快速发展&#xff0c;基于MEMS的惯性导航系统&#xff08;INS&#xff09;在任意环境的基站定位方面发挥着至关重要的作用。惯性导航具有自主性强、定位频率高、功耗低、实时性强等特点。因此更适合单兵作战、反恐行动、应急救…

【推荐】深入浅出benan的生命周期

目录 1.spring 管理JavaBean的过程&#xff08;生命周期&#xff09; 2.spring的JavaBean管理中单例模式及原型&#xff08;多例&#xff09;模式 2.1 . 默认为单例&#xff0c;但是可以配置多例 2.2.举例论证 2.2.1 默认单例 2.2.2 设置多例 2.2.3单例与多例的初始化的时…