jvm垃圾收集器简介

串行垃圾收集器

串行垃圾收集器,是指使用单线程进行垃圾回收,垃圾回收时,只有一个线程在工作,Java应用中的所有线程都要暂停,等待垃圾回收的完成。这种现象称之为STW(Stop-The-World),一般的javaweb应用中不会采用这种收集器

并行垃圾收集器

并行垃圾收集器是在串行的基础上做了改进,将单线程改为了多线程,但在收集的过程中仍会暂停应用程序,只是并行执行,速度更快,暂停的时间更短。

  • ParNew垃圾收集器

该垃圾收集器工作在年轻代上,通过-XX:+UserParNewGC参数设置,老年代仍然是串行垃圾收集器。

  • ParallelGC垃圾收集器

该收集器是在ParNewGC的基础上新增了两个参数,使得使用起来更灵活高效。

相关参数如下:

  • -XX:+UseParallelGC
    • 年轻代使用ParallelGC收集器,老年代串行
  • -XX:+UseParallelOldGC
    • 年轻代和老年代都使用该收集器
  • -XX:+MaxGCPauseMillis
    • 设置最大的垃圾收集的停顿时间,单位毫秒
    • 设置该参数可能会调整堆的大小或其他的参数,如果堆的大小设置的过小,就 会GC工作的频繁,反而会影响性能
  • -XX:UseAdaptiveSizePolicy
    • 自适应GC模式,垃圾回收器将自动调整新生代和老年代等参数,达到吞吐量,堆大小、停顿时间之间的平衡
    • 一般用于手动调整参数比较困难的场景,让收集器自动进行调整
  • -XX:GCTimeRatio
    • 设置垃圾回收时间占程序运行时间的百分比,公式为1/(1+n)
    • 它的值在0~100之间,默认值为99,即垃圾回收时间不超过1%

CMS垃圾收集器

CMS全称Concurrent Mark Sweep,是一款并行的,使用标记清除算法的收集器,该收集器是针对老年代进行垃圾回收的,通过-XX:+UserConcMarkSweepGc进行设置。执行过程如下:

  • 初始化标记(CMS-initial-mark),标记root,会导致stw;
  • 并发标记(CMS-concurrent-mark)。与用户线程同步进行
  • 预清理(CMS-concurrent-preclean).与用户线程同时运行
  • 重新标记(CMS-remark),会导致stw
  • 并发清除(CMS-concurrent-sweep),与用户线程同时运行
  • 调整堆大小,设置CMS在清理之后进行内存压缩,目的是清理内存中的碎片
  • 并发重置状态等待下次CMS的触发(CMS-concurrent-reset),与用户线程同时进行

G1垃圾收集器

原理

G1垃圾收集器相对于其他收集器而言,最大的区别在于取消了年轻代、老年代的物理划分,取而代之的是将堆划分为若干个区域(Region),这些区域包含了有逻辑上的年轻代、老年代区域,各代的存储是不连续的,每一代都是用n个不连续的大小相同的区域,每个区域占有一块连续的虚拟内存地址。如下图:

这样的好处就是不用对单独的空间进行设置,不用担心内存不足

每个内存分段都可以被标记为Eden区,Survivor区,Old区和Humongous区,这样属于不同代,不同区的内存分段就可以不必连续了。

G1中有一个特殊的区域:Humongous区。如果一个对象占用的空间超过了分区容量(Region)的50%,G1收集器会默认该对象是一个巨大对象(humongous object,H-obj),该对象有以下特征:

  • 默认直接分配到年老代,防止反复拷贝移动。
  • 该对象在并发标记清理阶段和Full GC阶段回收不再存活的对象
  • 在分配巨型对象之前先检查java堆占用率阈值,如果超过的话就启动并发标记,为的是提早回收从而防止Evacuation Failures 和Full GC
  • Young GC

Young GC主要是对Eden区进行GC,它在Eden空间被耗尽时会被触发

  • Eden空间的数据移动到Survivor中,如果Survivor空间不够,Eden区的部分数据会直接到年老代
  • Survivor区的数据移动到新的Survivor区中,部分数据到年老代空间中
  • 最终Eden空间的数据为空,GC停止工作,应用线程继续执行。
  • Remember Set(Rset,已记忆集合)

G1中引入了RSet的概念,其作用是跟踪指向某个对象的跟踪引用

在每个分区内部又被分为了若干个大小为512byte的卡片(card),标记对内存的最小可用粒度。所有分区的卡片将会记录在全局卡片表(Global Card Table)中,分配的对象会占用物理上连续的若干个卡片,当查找对分区内对象的引用时便可以通过记录卡片来查找该引用你对象。每次对内存的回收,都是对指定分区的卡片进行处理。

  • Mixed GC

当越来越多的对象到Old区中,为了避免内存被耗尽,虚拟机 会触发混合的垃圾回收机制,即(Mixed GC),该算法不是一个Old GC,除了回收年轻代之外,还会回收一部分的年老代,可以控制堆哪些年老代回收,从而控制垃圾回收的时间,也需要注意的是:Mixed GC不是Full GC

MIxed GC什么时候触发,是由参数XX:InitiatingHeapOccupancyPercent 决定,默认45%。该参数的意思是:当年老代大小占整个堆大小的百分比。

它的GC分为两步

1、全局并发标记 2、拷贝存活对象(evacuation)

  • 全局并发标记
    • 初始标记
      • 标记从根节点直接可达的对象,这个阶段会执行一次年轻代GC,产生全局停顿
    • 根区域扫描
      • G1 GC在初始标记的存活区扫描对年老代的引用,并标记被引用的对象
      • 该阶段和应用程序(非STW)同时运行,并且只有完成该阶段后,才开始下一次STW的年轻代回收
    • 并发标记
      • G1 GC在整个堆中查找存活的对象。该阶段和应用程序同时进行,可以被STW年轻代回收终端
    • 重新标记
      • 该阶段是STW回收,因为程序在运行,对上一次的标记进行修正
    • 清理垃圾
      • 清点和重置标记状态,该阶段会进行STW,整个阶段并不实际区垃圾回收。等待evacuation阶段回收
  • 拷贝存活对象

Evacuation阶段是全暂停的。该阶段把一部分Region中的存活对象拷贝到另一部分的Region中,从而实现垃圾清理

Full GC

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法题总结(十三)—— 动态规划(上)

动态规划 动态规划理论基础 什么是动态规划 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff…

工业物联网关-连接Thingsboard

拓扑未来网关支持通过MQTT与Thingsboard连接,连接成功后,网关所有外部终端设备都可以通过网关与Thingsboard平台通讯。首先需要在Thingsboard平台上新建一个网关设备,如下图,注意要勾选"是否网关",否则该设备…

怎样设置Windows系统不会自动同步时间

一、背景 我们在进行测试一些软件的时候需要调整Windows系统的时间到指定的日期,并且希望这个手动调整的日期可以固定住不变,不希望电脑重启后恢复到当前的最新日期。 二、操作方法 注意:如下的操作方法是以Windows7系统为例进行演示说明&a…

打破医院内外网通讯壁垒的关键-消息摆渡

随着医疗行业的数字化发展,医院的信息安全需求不断增加,尤其是内外网隔离的严格要求。医院内部网络被划分为内网和外网,以保证核心系统的安全性。然而,这也带来了新的挑战——如何在内网与外网之间进行安全、高效的通讯&#xff1…

STM32CUBEIDE在线汉化教程

打开cubeide 输入下面的地址 language https://archive.eclipse.org/technology/babel/update-site/R0.20.0/2022-12/ 这里会需要较长的时间等等下载完成 也可以打开网页后点击下载好之后使用离线安装,跳转另一篇文章 离线安装 等待进度条结束后&#xff0c…

Ajax(web笔记)

文章目录 1.Ajax的概念2.Ajax 的作用3.原生Ajax4.Axios4.1Axios的概念4.2Axios入门 1.Ajax的概念 AsynchronousJavaScriptAndXML,异步的JavaScript和XML 2.Ajax 的作用 数据交换:过Ajax可以给服务器发送请求,并获取服务器响应的数据。异步交互:可以在…

【重学 MySQL】六十六、外键约束的使用

【重学 MySQL】六十六、外键约束的使用 外键约束的概念关键字主表和从表/父表和子表外键约束的创建条件外键约束的特点外键约束的创建方式外键约束的删除外键约束的约束等级外键约束的级联操作外键约束的示例外键约束的作用开发场景阿里开发规范 在MySQL中,外键约束…

react子应用嵌入qiankun微前端后,多层抽屉drawer getContainer={false}挂载在当前位置后抽屉不在停靠在窗口的最边上

问题:react子应用嵌入qiankun微前端后,多层抽屉drawer getContainer{false}挂载在当前位置后抽屉不在停靠在窗口的最边上,如下图所示: 解决办法: 将抽屉都弹出到这个子页面的最外层容器。即设置getContainer{() >…

WPF入门_01布局

WPF布局包括两个阶段:一个测量(measure)阶段和一个排列(arrange)阶段.每个Panel都提供了自己的MeasureOverride和ArrangeOverride方法 1、Canvas 布局控件 Canvas面板是最轻量级的布局容器,它不会自动调整内部元素的排列和大小&…

国际期货收费行情源CTP推送式/期货配资软件开发对接行情源的技术性说明

在现代金融市场中,期货交易因其高风险和高回报特性而备受关注。为了满足期货交易者的需求,开发高效、稳定和安全的期货交易软件变得尤为重要。本文将对国际期货收费行情源CTP推送式及期货配资软件的开发对接行情源的技术细节进行详细说明。 一、CTP&…

机器学习 5.1-多类特征

你有一个单一的功能x房子的大小,你可以预测房子的价格,所以模型是f(x)wxb,但现在如果你不仅有房子的大小作为试图预测价格的特征,如果你也知道卧室的数量、楼层数和房子的年龄,这似乎会给你更多的信息来预测价格&#…

java面向对象编程--高级(二)

目录 一、内部类 1.1 成员内部类 1.1.1 静态和非静态 1.1.2 调用外部类的结构 1.2 局部内部类 1.2.1 非匿名和匿名 1.2.2 比较 1.2.3 练习 二、枚举类 2.1 枚举类讲解 2.2 代码实现 三、包装类 3.1 包装类与基本数据类型 3.2 练习 3.3 补充 四、自动生成单元测试…

java集合进阶篇-《Collection集合》

个人主页→VON 收录专栏→java从入门到起飞 目录 一、前言 二、Collection集合简要概述 Collection的主要实现 Collection的方法 迭代器(Iterator) 三、单列集合顶层接口Collection CollectionDemo01 CollectionDemo02 CollectionDemo03 Collec…

java maven

参考链接 maven相关配置 maven依赖管理 依赖具有传递性。 maven依赖范围 maven的生命周期 分为三个相互独立的生命周期: 在执行对应生命周期的操作时,需要进行前面的操作。比如,执行打包install的时候,会执行test。

算法时间、空间复杂度(二)

目录 大O渐进表示法 一、时间复杂度量级的判断 定义: 例一:执行2*N+1次 例二:执行MN次 例三:执行已知次数 例四:存在最好情况和最坏情况 顺序查找 冒泡排序 二分查找 例五:阶乘递归 ​编辑 例…

线下陪玩导游系统软件源码,家政预约服务源码(h5+小程序+app)

游戏陪玩系统源码陪玩小程序源码搭建基于PHP+MySQL陪玩系统app源码陪玩系统定制开发服务、成品陪玩系统源码 系统基于Nginx或者Apache PHP7.3 数据库mysql5.6 前端为uniapp-vue2.0 后端为thinkphp6 有域名授权加密,其他开源可二开 演示源码下载 开…

【实战项目】——Boost搜索引擎(五万字)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、项目的相关背景 1.1、什么是Boost库? 1.2、什么是搜索引擎? 1.3、为什么要做Boost库搜索引擎? 二、搜索引擎的宏观原…

大数据开发电脑千元配置清单

大数据开发电脑配置清单 电脑型号HUANANZHI 台式电脑操作系统Windows 11 专业版 64位(Version 23H2 / DirectX 12)处理器英特尔 Xeon(至强) E5-2673 v3 2.40GHz主板HUANANZHI X99-P4T(P55 芯片组)显卡NVIDIA GeForce GT 610 ( 2…

负载均衡和反向代理区别和nginx负载均衡模块

目录 负载均衡和反向代理区别 相似之处: 区别: 负载均衡和反向代理使用什么服务 nginx的负载均衡模块 ​编辑 负载均衡和反向代理区别 相似之处: 请求分发:两者都可以将客户端的请求分发到多个后端服务器,以提…

【AI绘画】Midjourney进阶:留白构图详解

博客主页: [小ᶻZ࿆] 本文专栏: AI绘画 | Midjourney 文章目录 💯前言💯什么是构图为什么Midjourney要使用构图 💯留白构图特点使用场景提示词书写技巧测试 💯小结 💯前言 【AI绘画】Midjourney进阶&…