4.JVM垃圾收集机制

news2024/9/22 13:35:01

1. 垃圾收集算法

在这里插入图片描述

1.1 分代收集理论

当前虚拟机的垃圾收集都采用分代收集算法,这种算法,没有什么新的思想,只是根据对象存活周期的不同将内存分成几块。一般将JAVA堆分为新生代、老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法

1.2 标记复制算法

为了解决效率问题,“复制”收集算法出现了。他可以将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存使用完成之后,就将还存活的对象复制到另一块区,然后再把使用的空间一次清理掉,这样就是每次内存回收都是对内存区间的一半进行回收

1.3 标记清楚算法

算法分为标记和清除阶段:标记存活的对象,统一回收所有未被标记的对象;也可以反着过来,它是最基础的收集算法,比较简单,但是会带来两个明显的问题

    1. 效率问题(如果需要标记的对象太多,效率不高)
    1. 空间问题(标记后产生大量不连续的碎片)

1.4 标记整理算法

根据老年代的特点标出的一种标记算法,标记过程仍然与标记清除算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存

2. 主流的垃圾收集器

在这里插入图片描述

2.1 Serial收集器(-XX:+UseSerialGc -XX:+UserSerialOldGc)

Serial(串行)收集器是最基本,最古老的垃圾收集器了。看名字就知道这个和收集器是一个单线程收集器。他的单线程不仅仅意味着只会使用一条垃圾收集线程去完成垃圾收集工作,跟重要的是它在进行垃圾收集工作的时候必须暂停其他所有线程的工作STW ,知道线程结束

在这里插入图片描述

2.2Parallel Scavenge收集器

Parallel收集器其实就是Serial收集器的多线程版本,除了使用多线程垃圾收集外,其余行为(控制参数、收集算法)和Serial收集器类似,默认的收集线程数和cpu核数相同,当然也可以指定线程数,但是一般不推荐修改

Parallel收集器关注点是吞吐量(高效利用cpu) CMS等垃圾收集器的关注点更多是用户线程停顿时间(提高用户体验)

在这里插入图片描述

2.3 ParNew收集器(Parallel new 收集器,只能用在年轻代)

ParNew收集器其实跟Parallel收集器很类似,区别在于他可以和CMS收集器配合使用

在这里插入图片描述

2.4 CMS收集器(只能用在老年代)

CMS (concurrent Mark Sweep) 收集器是以一种获取最短回收停顿时间为目标的收集器。他非常符合在注重用户体验的应用上使用,他是HotSpot虚拟机第一款真正意义上的并发收集器,它实现了垃圾收集线程和用户线程(基本)同时工作

从名字我们可以看出Mark Sweep可以看出,他是标记清除宣发实现的,运行过程比前面的收集器复杂一点

过程分为5个步骤

    1. 初始标记:暂停其他所有的线程STW,并且记录gc roots直接能引用的对象,速度很快
    1. 并发标记:并发标记就是从GC roots的直接关联对象开始遍历整个对象图的过程,整个过程耗时很长,但是不需要停掉用户线程,可以与垃圾回收线程一起并发运行。因为用户线程继续运行,可能会导致标记过的对象状态发生改变
    1. 重新标记:重现标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记的时间长,远远比并发标记的时间短。主要用到三色标记里的增量更新算法做了重新标记。
    1. 并发清理:开启用户线程,同时gc线程开始对未标记的区域进行清扫,这个阶段如果有新增的对象,会被标记为黑色不做任何处理
    1. 并发重置:重置本次GC过程中的标记数据

在这里插入图片描述
其实用CMS收集器STW的时间会变长一点,但是他拆分为了多个小的时间,这样用户几乎感知不到,牺牲了STW的时间,让用户体验变好

从名字我们可以看出他是一块优秀得垃圾收集器,主要有点:并发收集、低停顿。但是有下面几个明显的缺点

  • 对CPU资源敏感
  • 无法处理浮动垃圾(在并发标记和并发清理产生的垃圾,这种垃圾只能在下一次GC清理)
  • 他的回收算法,会有大量的空间碎片,当然你可以通过-XX:+UseCMSCompactAtFullCollection可以让JVM在执行完成之后在做整理
  • 执行过程的不确定性,会存在上一次垃圾回收还没执行完,然后垃圾回收又被触发的情形,特别是并发标记合并发清理阶段会出现,一边回收一边运行,也许没回收完再次出发fullGC,此时会进入STW,用serial old垃圾收集器回收

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

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

相关文章

【注意力机制】Self-attention注意力机制理论知识

注意力机制目录输入输出类别(N指向量个数):Self-attention引入self-attention架构self-attention怎么产生bbb例子:产生b1b^{1}b1例子:产生b2b^{2}b2self-attention 总结:Multi-head Self-attentionPosition…

使用 Learner Lab - 使用 API Gateway 与 Lambda 上传图片到 S3

使用 Learner Lab - 使用 API Gateway 与 Lambda 上传图片到 S3 AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务,让学生可以在 100 USD的金额下,自行练习所要使用的 AWS 服务,如何进入 Learner Lab 请参考 使用 Lear…

【车载开发系列】UDS诊断---读取数据($0x22)

【车载开发系列】UDS诊断—读取数据($0x22) UDS诊断---读取数据($0x22)【车载开发系列】UDS诊断---读取数据($0x22)一.概念定义二.报文格式1)请求2)肯定响应3)否定响应三…

Vue中$nextTick实现源码解析

这篇文章主要为大家介绍了Vue中$nextTick实现源码解析,有需要的朋友可以借鉴参考下! 先看一个简单的问题 {{ text }} 此时打印的结果是什么呢?是 old。如果想让它打印 new,使用 nextTick 稍加改造就可以 this.$nextTick(() >…

【计组笔记】06_指令系统

5.1 指令系统概述及指令格式 1. 指令的基本概念 2. 指令的分类 根据计算机层次结构分类 根据指令中地址码字段的个数分类 根据指令中操作数的物理位置分类 根据指令的功能分类 3. 指令格式 4. 指令的再认识 5. 指令格式举例 5.2 寻址方式及指令寻址 1. 寻址方式的概念 2.…

[论文阅读] 颜色迁移-Correlated Color Space

[论文阅读] 颜色迁移-Correlated Color Space 文章: Color transfer in correlated color space, [paper], [matlab code], [opencv code] 1-算法原理 本文算法比较简单, 其原理是把原始图像本身的空间分布进行归一化, 然后通过旋转平移缩放等变换, 变换到目标图像的空间分布…

WMS手动配货和自动配货的区别

手动配货 不知道配货流程的朋友可以看一下前面的文章链接: 深入浅出WMS之出库流程里面有对出库的解释说明,其中也有对配货的解释。前端页面也可以在前面的那篇文章中看到,这里我们来说一下后端部分。 查 手动配货是选中出库单的某条数据,然…

一文教你从Linux内核角度探秘JDK NIO文件读写本质(上)

1. 前言 在深入讲解Netty那些事儿之从内核角度看IO模型一文中曾对 Socket 文件在内核中的相关数据结构为大家做了详尽的阐述。 Socket内核结构.png 又在此基础之上介绍了针对 socket 文件的相关操作及其对应在内核中的处理流程: 系统IO调用结构.png 并与 epoll 的…

由阿里三位专家撰写:数据库高效优化:架构、规范SQL技巧文档

引言 学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。我们在刚出生…

[附源码]计算机毕业设计springboot作业管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

词袋模型(Bag-of-words model)

词袋模型词袋模型简介示例计算机视觉中的词袋模型词袋模型 简介 词袋模型(Bag-of-words model)是用于自然语言处理和信息检索中的一种简单的文档表示方法。通过这一模型,一篇文档可以通过统计所有单词的数目来表示,这种方法不考…

redis安装

版本号:redis-6.2.1 下载redis-6.2.1.tar.gz放/opt目录 解压命令:tar -zxvf redis-6.2.1.tar.gz 解压完成后进入目录:cd redis-6.2.1 在redis-6.2.1目录下执行make命令 出现make test 执行make install 查看redis默认安装路径:/u…

二、CANdelaStudio入门-版本介绍

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的各个版本,欢迎各位朋友订阅、评论,可以…

PbootCMS简单两步增加自动清理日志功能

问:网站没人访问触发不了清理怎么办? 答:我建议你不要关心这个,都没人访问你的网站,你还有个锤子东西需要清理? 问:听人说前台插入script触发会不安全? 答:都是成年人…

Web应用程序,简单的日志系统解决方案

一、简介 今天介绍一下,当你的程序没有日志系统时,如何快速方便查看当前程序日志的解决方案。如果你的程序有日志系统,可以不看本篇博客哈。本文实例是使用 C# 讲解,当然实现的核心思想适用于其他语言开发的系统。 二、解决方案…

nexus搭建测试dockermavennpm仓库

JAVA下载 https://www.oracle.com/java/technologies/downloads/archive/ https://login.oracle.com/mysso/signon.jsp QQq951699. [rootvm1 ~]# mkdir -p /data [rootvm1 ~]# mv jdk-8u221-linux-i586.tar.gz /data [rootvm1 ~]# cd /data;tar xf jdk-8u221-linux-i586.tar.g…

222页8万字智慧园区IOC平台运维管理平台解决方案

目 录 第一章 项目概述 7 1.1 园区格局的变化 7 1.1.1 传统安防面临的不足与挑战 7 1.1.2 园区安防未来的发展趋势 7 1.2 需求分析 8 1.2.1 平台集成化 8 1.2.2 数据可视化 8 1.2.3 管控全面化 8 1.2.4 覆盖高清化 9 1.2.5 指挥简易化 9 1.2.6 建设智能化 9 1.3 建设思路 9 1.3…

基于物联网设计的自反馈深紫外杀菌消毒系统(STM32F407)

一、前言 目前常态化防控病毒有很多种,其中主要是人工喷洒消毒液这种消毒方式,这种消毒效果无法得到量化,同时还可能存在喷洒盲区,也会对公民的呼吸道产生刺激,腐蚀损坏公共设施,而对于室内公共空间的消毒的要求会更高,基于这样的状况,人工喷洒消毒液这种方式肯定不太…

[附源码]JAVA毕业设计教学成果管理平台(系统+LW)

[附源码]JAVA毕业设计教学成果管理平台(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

C语言——利用矩阵LU分解法求逆、行列式

本章介绍了LU分解法,以及如何利用LU分解法求逆、行列式,针对每个公式、原理、代码进行了详细介绍,希望可以给大家带来帮助。 目录 LU分解法 概念 确定L、U矩阵 LU分解法的意义 程序设计 LUP求逆 1)代码 2)代…