垃圾收集器

news2025/1/8 4:30:39

1.术语
(1).吞吐量
CPU用于运行用户代码的时间与CPU总消耗的比值。

(2).全局停顿(Stop The World)
是在垃圾回收过程中,需要将JVM内存冻结的一种状态。在全局停顿状态下,除GC线程外,Java其它线程都是停止执行的,本地方法可以执行,但是无法与JVM交互。JVM调优就是尽量减少全局停顿时间,但是并不是越小越好,因为全局停顿时间的减少是以牺牲吞吐量和新生代空间为代价的。

(3).并行收集
指多个垃圾回收线程并行工作,但在回收过程中,用户线程处于等待状态。

(4).并发收集
用户线程和垃圾回收线程同时工作。

2.分类
七种垃圾回收器以及其作用的内存区域如下图所示,连线表示可以配合使用。
在这里插入图片描述

3.Serial收集器
(1).概念
Serial收集器是最基本、发展历史最久的收集器,采用复制算法的单线程的收集器。单线程一方面意味着它只会使用一个CPU或者一个线程去完成垃圾回收工作,另一方面也意味着它进行垃圾收集时必须暂停其他线程,直到它收集结束为止。
在这里插入图片描述

(2).特点

  • 使用复制回收算法
  • 单线程

(3).使用场景

  • 虚拟机运行在Client模式下
  • 单核服务器

4.ParNew收集器
(1).概念
Parnew收集器其实是Serial收集器的多线程版本,除了使用多线程进行垃圾收集外,其余行为和Serial收集器完全一样。
在这里插入图片描述

(2).特点

  • 使用复制回收算法
  • 多线程(可以使用-XX:ParallelGCThreads设置线程数,一般设置为CPU核数即可)

(3).使用场景

  • 虚拟机运行在Server模式下
  • 多核服务器

5.Parallel Scavenge收集器
(1).概念
Parnew收集器其实是Serial收集器的多线程版本,除了使用多线程进行垃圾收集外,其余行为和Serial收集器完全一样。
在这里插入图片描述

(2).特点

  • 使用复制回收算法
  • 多线程
  • 可以达到一个可控制的吞吐量

虚拟机提供了-XX:MaxGCPauseMills和-XX:GCTimeRatio两个参数来精确控制最大垃圾收集停顿时间和吞吐量大小。不过停顿时间并不是越小越好,GC停顿时间的缩短是以牺牲吞吐量和新生代空间换取的。
Parallel Scavenge收集器还有一个参数-XX:UseAdaptiveSizePolicy,这是一个开关参数,这个参数打开之后,就不需要手动指定新生代的Eden和Survivor区参数细节了,虚拟机会根据当前系统的运行情况动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量。

(3).使用场景
注重吞吐量的场景

6.Serial Old收集器
(1).概念
Serial Old收集器是Serial收集器的老年代版本,采用标记整理算法的单线程的收集器。
在这里插入图片描述

(2).特点

  • 使用标记整理回收算法
  • 单线程

(3).使用场景

  • 可以和Serial、ParNew、Parallel Scavenge新生代收集器配合使用
  • 作为CMS收集器的备用

7.Parallel Old收集器
(1).概念
Parallel Old收集器是Parallel Scavenge收集器的老年代版本,采用标记整理算法的多线程的收集器。
在这里插入图片描述

(2).特点

  • 使用标记整理回收算法
  • 多线程
  • 可控制的吞吐量

(3).使用场景

  • 可以和Parallel Scavenge新生代收集器配合使用
  • 关注吞吐量的场景

8.CMS收集器
(1).概念
使用标记清除算法以获取最短全局停顿时间为目标的收集器。
在这里插入图片描述

(2).收集步骤

  • 初始标记:标记GCRoots对象能直接关联到的对象,存在全局停顿。
  • 并发标记:标记GCRoots对象能关联到的所有对象,因为并发执行,所以不存在全局停顿。
  • 重新标记:修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,存在全局停顿。
  • 并发清除:回收内存空间,因为也是并发执行,所以不存在全局停顿。

(3).优点

  • 全局停顿时间比较短
  • 大多数过程是并发执行

(4).缺点

  • 内存碎片,不能等到老年代几乎满了才开始收集(Serial Old作为后备)
  • 并发执行导致吞吐量降低
  • 无法处理浮动垃圾,不能一次收集完垃圾

(5).使用场景

  • 系统全局停顿时间短,响应速度快的场景

9.G1
(1).概念
使用G1回收器的Java堆内存布局与其他收集器有很大差别,它将整个Java堆划分为多个大小相等的独立区域Region,虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔离的了,它们都是一部分(可以不连续)Region的集合。
然后跟踪每个Region里面的垃圾大小,评估回收该区域的垃圾后获得的内存价值,最后构建一个优先列表,根据允许的收集时间,优先回收价值高的Region,以获得更高的垃圾回收效率。
在这里插入图片描述

(2).Young GC

  • 所有Eden Region都满的时候,就会触发Young GC
  • Eden Region里存活的对象会被转移到Survivor Region
  • 原先Survivor Region里的存活对象,会被转移到新的Survivor Region,或者晋升到Old Region
  • 空闲的Region会被放到空闲列表中,等待下次被使用

(3).Mixed GC
老年代大小占整个堆的百分比达到一定阈值就会触发Mixed GC,Mixed GC会回收所有的Young Region和部分Old Region。

  • 初始标记:标记GCRoots对象能直接关联到的对象,存在全局停顿。
  • 并发标记:标记GCRoots对象能关联到的所有对象,因为并发执行,所以不存在全局停顿。
  • 最终标记:修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,存在全局停顿。
  • 筛选回收:对各个Region的回收价值进行评估和排序,并选择一些价值高的Region进行回收,存在全局停顿。
    • 选择一些Region构成一个回收集
    • 把需要回收Region里的存活对象复制到空的Region中
    • 删除掉需要回收的Region

(4).Full GC
复制对象内存不够,或者无法分配足够内存时,会触发Full GC,Full GC模式下,使用Serial Old模式,G1优化原则是尽量减少Full GC。

  • 增加预留空间(增大-XX:G1ReserverPercent,默认为堆的10%)
  • 更早的回收垃圾(减少-XX:InitiatingHeapOccupacyPercent,老年代达到该值就会触发Mixed GC,默认为45%)
  • 增加并发阶段使用的线程数(增大-XX:ConcGCThreads)

(5).特点

  • 作用在整个堆
  • 停顿时间可控
  • 使用复制算法
  • 无内存碎片

10.如何选择垃圾收集器
(1).关注的需求

  • 吞吐量(Parallel Scavenge和Parallel Old)
  • 响应时间(JDK8的话,内存小于等于6G的话使用CMS,大于6G的话使用G1)

(2).JDK版本

  • JDK9废弃CMS垃圾回收器
  • JDK6才开始使用G1垃圾回收器

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树15:左叶子之和

主要是我自己刷题的一些记录过程。如果有错可以指出哦,大家一起进步。 转载代码随想录 原文链接: 代码随想录 leetcode链接:404. 左叶子之和 题目: 给定二叉树的根节点 root ,返回所有左叶子之和。 示例&#xff1a…

支持设备的待机唤醒功能

系统待机唤醒功能 1 说明背景 1.1 需求 支持 GPU 进入低功耗模式,让用户选择降低设备的功耗 1.2 概念 上位词:APM, ACPI 同类词:睡眠模式, S0~S5 下位词:系统挂起, 系统唤醒, 运行时设备电源管理 1)ACPI 在计算机…

Rabbit MQ的基本使用

目录 1. MQ是什么,有哪些作用? 2. 主要的MQ框架有哪些? 3. RabbitMQ安装 4. RabbitMQ中的主要概念 5. 消息队列的核心概念 6. 一个简单的生产者和消费者示例。 6.1 消息发送者模块 1. MQ是什么,有哪些作用? 消…

Jenkins配合git构建持续构建流程

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 理解CI CI(Continuous Integration)翻译成持续集成,是指在源代码变更后自动检测、检出、构建、自动化测试到发布的过程。常见的开源CI工具有J…

Go类型与进制

iota:总是从0开始,递增为1的整数 一、进制 二进制0b1001000 0100 1000 八进制 0o110 01 001 000》 1 * 8^21 * 8^10 * 8^072 十六进制0x48 0100 1000 十进制转二进制 除以基数2,直到商为0为止,反向提取余数。 转为十六进制 除以基…

机器视觉(六):频域图像增强

目录: 机器视觉(一):概述 机器视觉(二):机器视觉硬件技术 机器视觉(三):摄像机标定技术 机器视觉(四):空域图像增强 …

【云原生】Grafana Alerting 告警模块介绍与实战操作

文章目录一、概述二、Grafana Alerting 模块介绍三、配置图表四、告警告警规则五、配置告警通道(Contact points)1)Email1、配置smtp(grafana.ini)2、配置消息模板3、配置告警通道2)WebHook1、编写webhook …

【问题记录与解决】TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

目录 一、报错内容二、尝试再运行(最终解决)一、报错内容 先来看报错截图: 再往上看看: 程序其实是正确执行了一部分的,可以看出首次运行时,是需要下载一些东西的。 二、尝试再运行(最终解决) 所测试的代码如下: # 昵 称:XieXu # 时 间: 2022/12/24/0024 18:44 fr…

刷机-把机顶盒当服务器使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、为啥要刷机顶盒什么?二、使用步骤1.拆机2.准备下载工具3.准备烧录软件和固件4.烧录5.如何使用总结前言 今天给大家分享一篇关于如何把机顶盒刷机…

国考省考行测:接语选择题,接下来最可能讲,上文可能谈,引言可能谈,有过渡句,看新主体,无过渡句,看主旨意思

国考省考行测:接语选择题,接下来最可能讲,上文可能谈,引言可能谈,有过渡句,看新主体,无过渡句,看主旨意思 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能…

vue3 +ts 第二篇

1.watch watchEffect 监听汇总 watchwatchEffect默认情况是惰性的,也就是说仅在侦听的源数据变更时才执行回调。不需要手动传入依赖更明确哪些状态的改变会触发侦听器重新运行副作用;会先执行一次用来自动收集依赖获取到侦听状态变化前后的值。无法获取…

【概念理解】内存对齐问题详述

内存之对齐,一文即可知 文章目录内存对齐1.概述2.如何进行内存对齐3.位域对齐大端存储与小端存储1.基本概念参考博客😊点此到文末惊喜↩︎ 内存对齐 1.概述 定义(什么是内存对齐) 编译器为程序中的每个数据单元安排在适当的位置…

【深入浅出Spring原理及实战】「开发实战系列」OAuth2的技术体系架构和开发概览

背景介绍 主要实现 OAuth2的三种授权模式:密码模式、客户端模式和授权码模式,包括展示授权服务器、资源服务器、客户端等几种角色的交互,以及JWT的整合。并且每个实例都提供两个代码版本:一个是基于旧的 Spring Security OAuth2 …

基于java学生成绩管理系统

开发工具eclipse,jdk1.8 技术:java swing 数据库:mysql5.7 学生选课系统功能:管理员、教师、学生三个角色 一、管理员功能: 1.登录、修改密码、退出系统 2.学生管理:添加、修改、删除、查询 3.班级管理&#x…

python文件夹拷贝思路

最近在做项目中,要使用python,对文件拷贝有了一些了解,这里将自己理解的文件拷贝整理出来。 如下所示,文件拷贝思路: 文件拷贝,从io上来说就是读文件,写文件到另一个指定的地方。 拷贝&#xff…

MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《1》

原论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 开源代码:https://github.com/ijkguo/mx-rcnn Parallel Faster R-CNN implementation with MXNet,使用MXNet实现快速并行的区域提议的卷积神经网络…

[oeasy]python0032_杀死进程_进程后台运行不输出_nohup_ps_显示进程

查看进程 回忆上次内容 上次先ctrl z 挂起进程 然后运行 bg程序继续跑起来而且不断输出到标准输出流甚至连ctrl c 都无法结束进程了这可怎么办呢?只能新开一个终端想办法 查询进程 搜索 debian进程查询找到具体方法 进程 具体方法动手试试 新开一个终端 运行ps…

新冠阳性的第五篇博客,宝塔面板如何快速部署一个SpringBoot项目

宝塔面板如何快速部署一个SpringBoot项目1.删除旧版本的Java2.安装Java3.配置Java环境变量4.宝塔快速部署1.删除旧版本的Java 删除旧版本的Java,防止对我们的服务产生影响! 如果你的服务器上没有下载过Java,则跳过此步骤! 查找…

【K3s】第1篇 K3s入门级介绍及架构详解

目录 1、什么是 K3s? 2、为什么叫 K3s? 3、适用场景 4、架构详解 单节点架构 高可用架构 K3s高可用架构: 固定 agent 节点的注册地址 注册 Agent 节点 1、什么是 K3s? K3s 是一个轻量级的 Kubernetes 发行版,它针对边缘计算、物联网等场景进…

SpringBoot图文详解 | 系统性学习 | 无知的我费曼笔记

无知的我复盘,顺便上传笔记。 对比Spring,SpringBoot 其实就是简化了固定的开发步骤。如坐标、Web3.0配置类、配置类 文章目录1 SpringBoot简介1.1 SpringBoot快速入门1.1.1 开发步骤1.1.1.1 创建新模块1.1.1.2 创建 Controller1.1.1.3 启动服务器1.1.1.…