JVM垃圾收集器

JVM-垃圾收集器 通过学习了解到现在商用的JVM中的垃圾收集采用的是分带收集算法,那么针对不同年代采用了不同的收集算法,从而在JVM发展的过程中,就产生了不同的垃圾收集器,一般分为新生代收集器和老年代收集器,两者相互组合进行GC操作(下图中相连的垃圾收集器表示可以相互组合,注意Serial Old和CMS也可以联合进行老年代的垃圾收集)。JDK6u14中开始测试的G1垃圾收集器,正式发布于JDK7u4中,是目前唯一 阅读详情

参考文献:周志明《深入理解Java虚拟机》第二版

垃圾收集器就是 GC 具体的实现,不同厂商,不同版本,针对虚拟机不同的分区都有不一样垃圾收集器

图. 基于JDK 1.7 update 14的 HotSpot虚拟机包含的收集器
这里写图片描述

Serial 收集器

这个收集器是一个单线程收集器,在它进行收集工作时,必须暂停其他所有的工作线程,直到收集结束,这种工作方式又被称为“Stop the World”
它采用 复制算法
因为单线程,所以会造成停顿,但也使得它简单而高效
适用于新生代 Minor GC
是运行在 Client 模式下的虚拟机的一个最佳选择

Serial Old 收集器

它是 Serial 收集器的老年代版本,也是一个 单线程 收集器
应用 标记-整理算法
应用于老年代 Full GC
主要用于 Client 模式下

图. Serial / Serial Old收集器运行示意图
Serial / Serial Old收集器运行示意图

ParNew 收集器

它是 Serial 收集器的 多线程 版

注意区分:
并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态
并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续执行,而垃圾收集程序运行在另一个CPU上

采用 复制算法
应用于新生代 Minor GC
适用于 Server 模式

图. ParNew / Serial Old 收集器运行示意图
这里写图片描述

Parallel Scavenge 收集器

它是一个 多线程 收集器
采用 复制算法
应用于新生代 Minor GC
特点:可控制吞吐量

吞吐量(Throughput):CPU 用于运行用户代码的时间与 CPU 总消耗时间的比值
吞吐量 = 运行代码时间 / (运行代码时间 + GC 时间)

提供设置参数:
-XX:MaxGCPauseMillis 控制最大 GC 停顿时间
-XX:GCTimeRatio 直接设置吞吐量大学
-XX:+UseAdaptiveSizePolic 动态自适应调整

它无法与 CMS 收集器配合工作,因为 CMS 收集器关注尽可能缩短 GC 时用户线程的停顿时间,与 Parallel Scavenge 的可控吞吐量不合

Parallel Old 收集器

它是 Parallel Scavenge 收集器的老年代版本
是一个 多线程 收集器
采用 标记-整理算法
应用于老年代 Full GC
经常与 Parallel Scavenge 配合,以充分达到“吞吐量优先”的作用

图. Parallel Scavenge / Parallel Old 收集器运行示意图
这里写图片描述

CMS 收集器

CMS(Concurrent Mark Sweep)收集器是一种以以获取最短回收停顿时间为目标的收集器
应用 标记-清除算法
它是一种 单线程与多线程结合使用 的收集器
收集步骤:

  1. 初始标记(CMS initial mark):在这个阶段中,程序中所有的工作线程都将会因为 STW 机制而出现短暂的暂停,这个阶段的主要任务仅仅是标记出 GC Roots 能直接关联到的对象,一旦标记完成就恢复运行,因此速度很快。
  2. 并发标记(CMS concurrent mark):从 GC Roots 的直接关联对象开始遍历整个对象图的过程,这个阶段耗时长但不需要停顿用户线程。
  3. 重新标记(CMS remark):这个阶段主要是为了修正并发标记期间,因为用户线程继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段也是 STW 但是速度很快。
  4. 并发清除(CMS concurrent sweep)

初始标记、重新标记仍然要“Stop the world”
CMS 收集器最大的优点就是 大大减少了停顿时间
但是,它也有三个明显的缺点:

① CMS 收集器对 CPU 资源敏感:它的并发清理虽然不会造成停顿,但是会占用 CPU 资源,导致用户程序变慢吞吐量低
② CMS 收集器无法处理浮动垃圾(Floating Garbage):因为清理过程是并发的,所以在清理过程中用户也会产生垃圾,这些垃圾叫做浮动垃圾,CMS无法清理,只能等到下一次清理
③ CMS 应用“标记-清除算法”(为了快速),所以会造成空间碎片

图. CMS收集器运行示意图
这里写图片描述

G1 收集器

G1(Garbage-First)收集器可以说是目前最先进的收集器了,它具有如下特点:

  • 并行与并发
  • 分代收集
  • 空间整合
  • 可预测停顿

G1 收集器的先进之处在于,它几乎完全区别于以往收集器的思想,它改变了 Java 堆的格局,它将整个 Java 堆分为多个大小相等的独立区域(Region),虽然还保留有新生代和老年代的概念,但新生代与老年代不再是物理隔离的了,它们都是一部分 Region (不需要连续)的集合
G1 收集器能够预测停顿时间,是因为它可以有计划地避免在整个 Java 堆中进行全区域的垃圾收集,它跟踪各个 Region 里面的垃圾堆积的价值大小,在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的 Region

收集步骤:

  1. 初始标记(Initial Marking)
  2. 并发标记(Concurrent Marking)
  3. 最终标记(Final Marking)
  4. 筛选回收(Live Data Counting and Evavcuation)

前几步与 CMS 收集器非常相似,最后的筛选回收,就是从优先列表中根据预测停顿时间选择回收

图. G1 收集器运行示意图
这里写图片描述

G1 从 Java7 中实验性加入,在 Java9 后成为默认回收器。

Java JVM 中的垃圾收集器及其配置指南 Serial GC: 单线程,适用于小型应用。: 多线程,适用于需要高吞吐量的应用。是 JDK 8 的默认垃圾收集器。: 并发垃圾收集,适用于低停顿时间需求的应用。: 平衡吞吐量和停顿时间,是 JDK 9+ 的默认垃圾收集器。: 超低延迟垃圾收集器,适用于需要极低停顿时间的大内存应用。: 类似于 ZGC,也是超低延迟垃圾收集器。Epsilon GC: 无操作垃圾收集器,主要用于测试和基准分析。在选择 Java 的垃圾收集器时,应根据应用程序的特点和需求来选择最合适的垃圾收集器。 阅读详情

相关推荐

CTP开发实战:如何高效处理预埋单与委托单的完整流程(附代码示例)

本文深入探讨了CTP开发中预埋单与委托单的完整处理流程,从订单生命周期理解、核心代码实现到异步事件处理与系统健壮性构建。通过详细的代码示例和状态机分析,为开发者提供了构建高可靠订单处理系统的实战指南,重点解决了状态同步、异常恢复等关键工程挑战。

weixin_29234239的博客 117

Java中的垃圾收集器如何设置 — JVM系列(十)

JVM中的重要参数 我们已经知道了有哪些垃圾收集器,那么它们在JDK中又是如何设置的呢? 参数 功能 UseParNewGC 使用ParNew + Serial Old UseSerialGC 虚拟机运行在Client模式下的默认值,是Serial + Serial Old UseParallelGC 虚拟机运行在Server模式下的默认值,Parallel Scaveng...

2601

Windows 11 部署 Docker Desktop:从 WSL 报错到服务配置的完整排障实录

本文详细记录了在Windows 11上部署Docker Desktop时遇到的WSL报错问题及完整解决方案。从Hyper-V配置、BIOS设置到系统服务检查,提供了一系列实用命令和排查步骤,帮助开发者快速解决'Unexpecter WSL error'等常见问题,实现Docker与WSL2的稳定运行。

weixin_30687051的博客 122

JVM - 再聊GC垃圾收集算法及垃圾收集器

文章目录Pre分代收集理论常见的垃圾收集算法标记 Pre JVM-04垃圾收集Garbage Collection(上)【垃圾对象的判定】 JVM-05垃圾收集Garbage Collection(中)【垃圾收集算法】 JVM-06垃圾收集Garbage Collection(下)【垃圾收集器】 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法 , 意思就是根据对象存活周期的不同将 java堆分为新生代和老年代,这样就可以根据各个年代的特点选择合适的垃圾收集算法。 举个例子,新生代中,大部分对象都是

小工匠 2万+

通信工程学习:什么是ASK振幅键控、FSK频移键控、PSK相移键控

ASK、FSK和PSK是三种基础数字调制技术。ASK通过改变载波振幅传输信息,实现简单但抗干扰弱;FSK利用频率变化传递信号,抗干扰较强但频谱利用率一般;PSK通过相位变化编码数据,抗干扰和频谱效率最优但同步要求高。三种技术各具特点,分别适用于不同通信场景:ASK用于低速光纤通信,FSK常见于无线广播,PSK则广泛应用于Wi-Fi、蓝牙等现代通信系统。

limengshi138392的博客 8727

深度学习入门:使用CMSIS-NN在微控制器上部署模型的完整指南与Python Jupyter实践

CMSIS-NN是ARM为Cortex-M系列微控制器设计的神经网络库。它旨在提供一套高效、轻量级的神经网络API,使得开发者可以在资源受限的微控制器上运行深度学习模型。CMSIS-NN优化了各种常见的神经网络层,如卷积层、全连接层等,确保它们在微控制器上的运行效率。# 定义模型])# 编译模型# 训练模型这样,我们就得到了一个简单的手写数字识别模型。注意:为了简洁和清晰,本文中的代码可能不是最优的或最完整的实现。为了获得完整的项目和更多的优化技巧,请下载完整项目。

m0_57781768的博客 5884

深入理解java虚拟机笔记:自动内存管理

第2章 java内存区域 寄存器架构的cpu和栈架构的cpu

groovy2007的专栏 1277

STM32 SAI接口TDM模式实战:8通道音频采集系统搭建全流程(附DMA配置代码)

本文详细介绍了基于STM32 SAI接口TDM模式搭建8通道音频采集系统的全流程。内容涵盖硬件连接设计、CubeMX时钟树与SAI外设的详细配置,并重点解析了TDM模式的核心代码实现与DMA双缓冲机制,提供了完整的配置代码和常见时序问题排查指南,助力开发者高效实现多通道音频传输与处理。

weixin_29192211的博客 505

jdk8默认垃圾回收器_两分钟了解JDK8默认垃圾收集器(附英文)

Hello!today let's try to know the default GC of JDK8.You know,在JDK8中JVM(Java Virtual Machine)的参数大概总数有1850多个,有详细介绍的参数也有680之多。而这就包括使用默认垃圾收集器的参数,可以通过java -XX:+PrintCommandLineFlagsjvm -version命令打印出JDK默认使...

weixin_39664746的博客 3309

当LightGBM推理遇上GPU:3种替代方案性能对比(含ONNX实战代码)

本文针对LightGBM官方不支持GPU推理的性能瓶颈,深度评测了RAPIDS cuML、ONNX Runtime GPU和Triton Inference Server三种GPU加速推理替代方案。通过详尽的性能对比和实战代码,为高并发、低延迟的在线预测场景提供了清晰的选型指南,帮助工程师打破推理性能枷锁,实现显著的吞吐量提升。

salt9的博客 813

3、★☛基于STM32的手机通过wifi控LED灯√♠★

3、基于STM32的手机通过wifi控LED灯 文章目录3、基于STM32的手机通过wifi控LED灯1、Introduce介绍1.1、课题背景及其意义1.2、 国内外的研究状况2、方案的设计2.1、控制方案的确定2.2、控制方式的选择2.2.1、 单片机芯片的选择方案一方案二方案三方案四2.2.2、无线遥控模块的选择方案一方案二方案三3、硬件电路的设计3.1、系统的功能分析及体系结构设计3.1.1、系统功能分析3.1.2、系统总体结构3.2、模块电路的设计3.2.1、 STM32单片机核心电路设计3.2.

行走的皮卡丘 2962

java虚拟机HotSpot中的垃圾收集器

如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。这里讨论的收集器基于JDK 1.7 Update 14之后的HotSpot虚拟机。这个虚拟机包含的所有收集器如下图所示:

不能说的秘密的博客 2734

复旦微实现串口在线升级BOOT.BIN

将该 demo 生成的 app(升级用)和 fsbl、最简化 bit 文件(可选)打包成 BOOT.BIN,作为 golden image 烧写在 qspi flash 偏移 0 地址开始的位置,其中最简化 bit 文件为在线升级功能提供必要的物理通道(如果不需要,可以不打包该文件),golden image 一旦发布基本不需要进行升级,由该 golden image 负责和上位机进行通信交互,完成业务 app、业务 bit 文件、uboot 以及操作系统 image 等文件在线升级,在qspi flash

wangjie36的博客 3174

JVM之垃圾收集器

JVM垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法)的具体实现,不同JVM所提供的垃圾收集器可能会有很大差别。Java垃圾回收器为应用程序提供内存的自动分配、自动回收功能。

积跬步,至千里。 822

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JVM垃圾收集——垃圾收集器

垃圾收集器的发展和分类、Serial收集器、ParNew收集器、Parallel Scaveng收集器、CMS收集器、G1收集器、ZGC收集器

码说芯语的博客 2908

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【JVM】垃圾收集器详解

垃圾收集器详解

关关的博客 1510

JVM垃圾收集—垃圾收集器及常见组合参数

链接: JVM垃圾收集—垃圾收集算法上一篇介绍了垃圾收集算法及分区,这篇我们来学习垃圾收集器 首先我们要知道垃圾收集器有三种类型:串行收集器 Serial 和 Serial Old 只能有一个垃圾回收线程执行,用户线程暂停。(适用于内存较小的嵌入式设备)并行收集器[吞吐量优先] Paraller Scanvenge、Parallel Old 多条垃圾收集线程并行工作,但此时用户线程仍然处于等待阶段。(适用于科学计算、后台处理等若干交互场景)并发收集器[停顿时间优先] CMS、G1 用户线程和垃圾收集线程同

想着百万年薪努力的小赵 5万+

JVM的垃圾收集器

继上期简单介绍了一下JVM的基本知识与垃圾回收机制,本期来为大家介绍JVM中垃圾回收器迭代与特性。

2301_77061447的博客 1037

常见的jvm垃圾收集器有哪些

场景推荐收集器理由个人电脑、小型测试开销最小,足够使用JDK 8 默认、计算密集型吞吐量优先,最大化计算效率JDK 8 及之前,Web应用响应时间优先,减少用户请求延迟JDK 9+ 默认,通用服务端G1在吞吐量和延迟间取得最佳平衡,大堆友好超大堆、极致低延迟ZGC(或Shenandoah停顿时间极短且可预测,适用于核心金融、实时系统演进路线Serial->Parallel(吞吐量) ->CMS(低延迟) ->G1(全堆、可预测停顿) ->(极致低延迟)

埃泽漫笔 790

JVM调优之JVM垃圾收集器

JVM垃圾收集器,Serial、Serial Old、Parallel Scavenge、Parallel Old、ParNew、CMS、G1、ZGC

weixin_43575663的博客 1455

【JVM】JVM垃圾收集器

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

weixin_45618869的博客 1045

如何查看JVM使用的是什么垃圾收集器

本文介绍了如何查看JVM使用的垃圾收集器。然后又通过代码验证了一下大对象的内存分配策略:了解了什么情况下大对象会直接进入老年代。

长路漫漫,以勤作车 3300

JVM——垃圾收集器

垃圾收集器在许多场景中都是影响系统停顿时间和吞吐能力的重要因素之一,虚拟机之所以提供多种不同的收集器以及大量的调节参数,就是因为只有根据实际应用需求、实现方式选择最优的收集 方式才能获取最好的性能。没有固定收集器、参数组合,没有最优的调优方法,虚拟机也就没有什么 必然的内存回收行为。因此学习虚拟机内存知识,如果要到实践调优阶段,必须了解每个具体收集器 的行为、优势劣势、调节参数。

L170311的博客 874

JVM_垃圾收集器

注意:并行垃圾回收在单核CPU下可能会更慢。

m0_58617940的博客 1171
上一篇: JVM垃圾收集(GC)
下一篇: Class类文件结构概述
WhataNerd
博客等级 码龄11年 191粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值