干货来袭!JVM&G1 GC+JVM高级特性和最佳实践,助你深度掌握JVM

HotSpot G1 GC 的分区记账、SATB 并发标记与停顿目标调优解析 线上GC毛刺该调停顿目标、加大新生代还是换收集器?本文从HotSpot G1的设计出发,梳理分区与巨型对象、卡表与记忆集、写屏障与细化线程、停顿预测、SATB并发标记、自适应IHOP、混合回收规则及Full GC兜底,并注明JDK8至JDK27的版本差异。文中在JDK8与JDK17上实测:停顿目标从200ms降到20ms,伊甸区缩小四成、P99下降但仍超目标;巨型对象会反复触发又撤销并发标记;JDK17并行Full GC平均停顿约为JDK8的三成。最后给出日志解读、参数清单、调优流程与选型。 阅读详情

前言

Java是目前用户最多、使用范围最广的软件开发技术,Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三方Java框架(如Spring、MyBatis等) 构成。在国内,有关Java类库API、Java语 言语法及第三方框架的技术资料和书籍非常丰富,相比而言,有关Java虛拟机的资料却显得异常贫乏。

JVM是Java语言可以跨平台、保持高发展的根本,没有了JVM, Java 语言将失去运行环境。针对Java程序的性能优化一定不可能避免针对JVM的调优,随着JVM的不断发展,我们的应对措施也在不断地跟随、变化,内存的使用逐渐变得越来越复杂。所有高级语言都需要垃圾回收机制的保护,所以GC就是这么重要。

今天,小编就为大家带来两篇学习JVM&G1 GC以及JVM高级特性和最佳实践的秘籍,咱们来一探究竟吧~~~


深入理解JVM&G1 GC


内容简介

G1 GC提出了不确定性Region,每个空闲Region不是为某个固定年代准备的,它是灵活的,需求驱动的,所以G1 GC代表了先进性。

本篇主要为学习Java语言的学生、初级程序员提供GC的使用参考建议及经验,着重介绍了G1 GC。中国的软件开发行业已经有几十年了,从目前的行业发展来看,单纯的软件公司很难有发展,目前流行的云计算、物联网企业实际上是综合性IT技术的整合,者就需要有综合能力的程序员。本书作者力求做到知识的综合传播,而不是仅仅针对Java虚拟机和GC调优进行讲解,也力求每一章节都有实际的案例支撑。

本书具体包括以下几方面:JVM基础知识、GC基础知识、G1 GC的深入介绍、G1 GC调优建议、JDK自带工具使用介绍等。

通读本篇后,读者可以深入了解G1 GC性能调优的许多主题及相关的综合性知识。读者也可以把本书作为参考,对于感兴趣的主题,直接跳到相应章节寻找答案。


目录介绍

第一章:JVM&GC基础知识

  • 引言
  • Java相关术语
  • JVM/GC通用术语
  • G1涉及术语

     

通过本章我们应该理解:

  • 为什么我们需要了解JVM和GC,这是阅读本篇的依据。
  • 了解GC的基础常用术语知识,作者和读者需要对术语定义进行统一。
  • 了解JVM的基础知识,包括堆、栈、方法区等。
  • 为深入了解JVM和GC做好知识储备。

第二章:JVM&GC深入知识

  • Java虚拟机内存模型
  • 垃圾收集算法
  • Garbage Collection
  • 常见问题解析
  • 本章小结

     

本章主要介绍和解决以下问题

  • 了解JVM和内存相关的知识。
  • 了解常见的垃圾收集算法,这是GC实现的根本目标。
  • 了解GC的基本概念。
  • 了解各类GC的特性。
  • 为深入了解G1GC做好知识储备。

第三章:G1 GC应用示例

  • 范例程序
  • 选项解释及应用

     

本章主要介绍和解决以下问题,这些也是后续章节的实践部分。

  • 确定一个简单的代码程序作为示例。
  • 了解G1 GC自带的各种命令行选项。
  • 了解各个选项单独或混合使用后的运行输出
  • 对G1 GC输出日志进行一些解释。

第四章:深入G1 GC

  • G1 GC概念简述
  • G1 GC分代管理
  • G1 GC使用场景
  • G1 GC论文原文翻译(部分)

     

本章是全篇的概念层面核心章节,主要介绍和解决以下问题。

  • 深入学习G1 GC的各种基本概念。
  • 深入学习G1 GC的设计理念。
  • 深入了解G1 GC的各类特性。
  • 为第5章节针对G1GC的性能优化方案做知识准备。

第五章:G1 GC性能优化方案

  • G1的年轻代回收
  • 年轻代优化
  • 并行标记阶段优化
  • 混合回收阶段
  • 如何避免出现GC失败
  • 引用处理

     

本章主要介绍和解决以下问题,这些也是全篇的概念层面核心章节。

  • 对G1 GC各种概念进一步深入学习。
  • 深入运用G1 GC的特性。

第六章:JVM诊断工具使用介绍

  • SA基础介绍
  • SA工具使用实践
  • 其他工具介绍

     

本章主要介绍和解决以下问题,这些主要针对SA工具进行学习。

  • 什么是Serviceability Agent工具?
  • 了解相关概念、工具的基本功能及实践介绍。
  • 了解工具的扩展功能、插件介绍。
  • 对一些常见问题作出总结。

JVM高级特性和最佳实践

内容概述

本篇一共分为五个部分:走近Java、 自动内存管理、虚拟机执行子系统、程序编译与代码优化、高效并发。各个部分之间基本上是互相独立的,没有必然的前后依赖关系,读者可以从任何一个感兴趣的专题开始阅读,但是每个部分各个章节间则有先后顺序。

这里并没有假定所有读者都在Java领域具备特别专业的技术水平,因此会在保证逻辑完整、描述准确的前提下,尽量用通俗的语言和案例去讲述虛拟机中与开发关系最为密切的内容。但是,本篇毕竟是在探讨虛拟机的工作原理,不可避免地需要读者有一定的技术基础,而且本篇的读者定位是中、高级程序员群体,对于一些常用的开发框架、Java类库API和Java语法等基础知识点,将假设读者已有所了解。

本篇介绍的Java虛拟机并不局限于某一个特定发行商或者某一款特定虚拟机,只是由于OracleJ DK/OpenJDK在市场占有率上的绝对优势,其中的HotSpot虛拟机不可避免地成为本书主要分析、讲解的对象,本篇在涉及Java虛拟机自身实现相关的内容时,大多将以HotSpot虛拟机为目标对象来进行讲解。但撰写本篇的意图并不是去做HotSpot的源码导读或者解析,本篇所讲述的内容多为Java虚拟机的通用原理,即使读者使用了HotSpot之外的其他Java虚拟机实现,也会有所收获。

目录预览

第一部分:走近Java

  • 走近Java
  • 概述
  • Java技术体系
  • Java发展史
  • Java虚拟机家族
  • 展望Java技术的未来
  • 实战:自己编译JDK

     

本篇的第一部分为后文的研究和讲解建立了良好的基础。虽然了解Java技术的来龙去脉,以及编译自己的OpenJDK对于读者理解Java虚拟机并不是必须的,但是这些准备过程可以为走近Java技术和Java虚拟机提供良好的引导。


第二部分:自动内存管理

  • Java内存区域与内存溢出异常
  • 垃圾收集器与内存分配策略
  • 虚拟机性能监控、故障处理工具
  • 调优案例分析与实战

     

这部分介绍了虚拟机中内存是如何划分的,哪部分区域、什么样的代码和操作可能导致内存溢出异常,并讲解了各个区域出现内存溢出异常的常见原因。介绍了垃圾收集的算法和HotSpot虚拟机中提供的几款垃圾收集器的特点及运作原理。通过代码实例验证了Java虚拟机中自动内存分配及回收的主要规则。介绍了随JDK发布的基础命令行工具与可视化的故障处理工具的使用方法。


第三部分:虚拟机执行子系统

  • 类文件结构
  • 虚拟机类加载机制
  • 虚拟机字节码执行引擎
  • 类加载及执行子系统的案例与实战

     

这部分讲解了Class文件结构中的各个组成部分,以及每个部分的定义、数据结构和使用方法, 以实战的方式演示了Class的数据是如何存储和访问的。介绍了类加载过程的“加载”“验证”“准备”“解析”和“初始化”五个阶段中虚拟机分别进行了 哪些动作,还介绍了类加载器的工作原理及其对虚拟机的意义。分析了虚拟机在执行代码时,如何找到正确的方法、如何执行方法内的字节码,以及执行代码时涉及的内存结构。通过几个类加载及执行子系统的案例,介绍了使用类加载器和处理字节码的一些值得欣赏 和借鉴的思路,并通过一个实战练习加深读者对前面理论知识的理解。


第四部分:程序编译与代码优化

  • 前端编译与优化
  • 后端编译与优化

     

这部分分析了Java语言中泛型、主动装箱拆箱、条件编译等多种语法糖的前因后果,并实战练习了如何使用插入式注解处理器来完成一个检查程序命名规范的编译器插件。讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析即时编译的数据和结果,还选择了几种常见的编译器优化技术进行讲解。


第五部分:高效并发

  • Java内存模型与线程
  • 线程安全与锁优化

     

这部分讲解了虚拟机Java内存模型的结构及操作,以及原子性、可见性和有序性在Java内存模型中的体现;介绍了先行发生原则的规则及使用,以及线程在Java语言之中是如何实现的;还提前介绍了目前仍然在实验室状态的Java协程的相关内容。介绍了线程安全所涉及的概念和分类、同步实现的方式及虚拟机的底层运作原理,并且介绍了虚拟机实现高效并发所做的一系列锁优化措施。


后记

总的来说,本篇对Java JVM、GC机制的分析深入浅出,是对大数据Java内存回收的优秀实践。读完茅塞顿开、受益匪浅。很多技术细节应用之后,对产品性能有明显提升。

关于token无痛刷新的两个方案 目录方案一方案二 方案一 思路: 后端需要返回一个token过期的时间,在请求发起前拦截每个请求,判断token的有效时间是否已经过期,如果已过期,则暂时将请求挂起,先刷新token后再继续请求。 前期思考: 返回过期时间是为了判断是否过期的,但是如果服务器时间和系统时间不一致呢? 如果同时发起多个请求时怎么办? 实现: 因为是在请求前进行拦截,所以这里用axios的axios.interceptors.request.use()方法 首先,关于服务器时间和系统时间不一致的问题,我的解决方法是: 阅读详情

相关推荐

postman响应体:“msg“: “请求缺失签名Sign“、 “msg“: “请求缺失时间戳“

请求标头有Sign、Timestamp,但是直接将网址复制到postman时,Headers没有自动生成这两个参数,所以运行时会报错。

m0_46862648的博客 1706

G1 GC

G1GC基础概念,CMS GC,配置参数。G1GC处理步骤。各个GC比对

YimBa的博客 3901

从零到一:3D Slicer与MONAI在医学影像中的AI革命

本文探讨了3D Slicer与MONAI在医学影像分析中的革命性应用,展示了如何通过开源工具实现高效的三维影像处理和AI增强分析。结合临床案例,详细介绍了从数据准备到AI分析的全流程,显著提升诊断效率和精度,推动医学影像技术迈向新纪元。

tcp8optimizer的博客 340

G1 GC详解及设置

G1 GC详解及Full GC的触发情况

深圳市多克创新科技有限公司 7084

spring-ai学习(四)-MCP

创建一个springai项目1.依赖。

zql1455890112的博客 1384

泛微OA表单设计实战:如何快速实现自定义多选浏览框(附完整配置步骤)

本文详细介绍了在泛微OA中快速实现自定义多选浏览框的完整配置步骤。针对招聘提报、活动审批等需要从海量数据中规范选择多个条目的业务场景,文章从理解需求、构建数据源、设计查询页面到创建浏览框控件,提供了清晰的实战指南,帮助开发者高效解决复杂数据选择难题,提升表单操作体验。

yog99的博客 1048

G1 GC是什么?

写在前面 本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见100个问题搞定Java虚拟机 解答 G1(Garbage First)是一个横跨新生代和老年代的垃圾收集器。 实际上,它已经打乱了新生代和老年代的堆结构,直接将堆分成极其多个区域。每个区域都可以充当 Eden 区、Survivor 区或者老年代中的一个。 它采用的是标记 - 压缩算法,而且和 CMS 一样都能够在应用程序运行过程中并发地进行

Shockang的博客 4万+

如何在飞腾平台上安装Ubuntu操作系统

注意: 若主板上配置的是NVME硬盘,在进行内核配置时,需要将内核的NEME驱动勾选上,否则移植内核时,无法找到文件系统,进不去操作系统。可以通过rufus软件将镜像做到U盘中,本次使用版本为Rufus 3.9.124 ,其他版本也可以。不要下载live版本的,没有准备网络环境,是一个头疼的事情,笔者暂时没有实现网络安装。将U盘接到主板usb口上,接上串口,显示器,,必需串口有打印才可以安装。可以通过dd命令,将iso安装到U盘。安装的是最小系统,缺少很多命令,需要联网更新,或则更换飞腾专用内核。

技术联盟 2643

G1简介、各种GC总结

G1:概述、优缺点、特点、模式与环节(Young GC、Mixed GC和Full GC)、老年代并发标记过程、参数; 技术:String去重、三色标记、SATB、Remembered Set、Pause Prediction Model; 总结:汇总、示意图、选择

lonelymanontheway的博客 2267

《使用R包ggtree进行进化树的绘制与美化》

都2023年了,才去使用Y叔早在2018年发表的进化树构建利器——ggtree。刚好最近在做基因家族分析,进化树的构建与美化确实有点麻烦,先前使用MEGA11进行了绘制,但图像简陋,于是导出了nwk文件,准备使用其他软件进行美化。这里,我使用ggtree包进行操作。

沉香best的博客 6894

使用pyqt5实现可勾选的测试用例界面

使用pyqt5实现可勾选的测试用例界面

天赐好车的博客 629

向前迈进!走入GC世界:G1 GC原理深入解析

对象从创建到回收经历了什么?那天书般的GC日志到底想告诉我们什么?你是否对此感到好奇,那么请耐下心来,让我带你一起走入这美妙的GC世界,本文将以通俗易懂的方式告诉你G1在背后究竟做了什么。

Zookkk的博客 1947

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

G1调优常用参数及其作用

G1调优参数及其作用机制

点滴之积 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

G1 GC(Garbage-First Garbage Collector)原理详解

统计各 Region 的存活对象比例,排序回收价值(Garbage-First)。:标记 GC Roots 直接关联的对象(与 Young GC 同步执行)。动态调整 Region 的角色,避免传统分代 GC 的固定比例限制。存活对象被复制到新的 Survivor 区(或晋升到 Old 区)。:通过选择回收价值高的 Region(垃圾比例高),最大化回收效率。:标记 Eden 和 Survivor 区的存活对象。:新生代和老代的大小不固定,由 G1 自动调整。清空 Eden 和旧的 Survivor 区。

weixin_37944816的博客 1250

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

G1GC优化方案—官方原版

G1GC优化方案

深圳市多克创新科技有限公司 1435

这可能是最清晰易懂的 G1 GC 资料

于JDK 6u14版本发布,JDK 7u4版本发行时被正式推出,在JDK9时已经成了默认的垃圾回收器,算是CMS回收器的替代 方案(CMS在JDK9以后已经废弃)G1是一款分代的 (generational),增量的 (incremental),并行的 (parallel),移动式(evacuating)的,软实时的垃圾回收器。其最大特点是暂停时间可配置,我们可以配置一个最大暂停时间,G1就会尽可能的在回收的同时保证程序的暂停时间在允许范围内,而且在大内存环境下表现更好。

大叶子不小的博客 981

(一)万字详解G1垃圾收集器 —G1的设计目标是什么?G1的分区是什么?卡表的作用和工作原理?如何解决漏标问题?

巨型对象(Humongous Object)是指大小达到或超过分区(Region)大小一半的对象。G1垃圾收集器对这类对象有特殊的处理机制。卡表(Card Table)是G1垃圾收集器中的一个重要数据结构。它是由元素为1字节的数组实现的,数组中的每个元素称为卡片或卡页。卡表映射到整个堆空间,每个卡片对应堆中的512字节空间。每个Region被分成若干个大小为512字节的连续内存区域。以1MB大小的Region为例,每个Region对应2048个Card Page。

weixin_45322373的博客 1746

二 垃圾回收:第07讲:大厂面试题:有了 G1 还需要其他垃圾回收器吗?

本课时我们主要来看下这两个高频的面试考题: G1的回收原理是什么?为什么 G1 比传统 GC 回收性能好? 为什么 G1 如此完美仍然会有 ZGC? 我们在上一课时,简要的介绍了 CMS 垃圾回收器,下面我们简单回忆一下它的一个极端场景(而且是经常发生的场景)。 在发生 Minor GC 时,由于 Survivor 区已经放不下了,多出的对象只能提升(promotion)到老年代。但是此时老年代因为空间碎片的缘故,会发生 concurrent mode failure 的错误。这个时候,就需要降级为.

AlbenXie的博客 1083

JVM中G1垃圾收集器:原理、过程和参数配置深入解析

G1收集器(Garbage-First Garbage Collector,简称G1 GC)是Java虚拟机(JVM)中的一种垃圾收集器,专为服务器端应用设计,特别适用于具有多核处理器和大内存的机器。G1 GC在JDK 7u4版本中被正式推出,并且在JDK 9中成为默认的垃圾收集器。它的主要目标是在满足高吞吐量的同时,尽可能缩短垃圾收集造成的停顿时间。G1垃圾收集器以其可预测的停顿时间、灵活的内存管理和高效的并发标记等特点,在JVM中占据了重要的地位。

码到三十五 3万+

jvm之G1 GC

G1 GC 分析

wang0907的博客 2756

浅谈GC标记清除算法简述。串行GC,并行GC,CMS GC,G1 GC总结,这么多GC,该选择使用哪个GC?

本文讲述了GC的标记算法,主要总结了串行GC,并行GC,CMS GC,G1 GC的主要特点已经相应的开启参数,提及了ZGC和Shenandoah GC。总结了上述GC的特点以及该如何选择GC。同时简单分析了GC中年轻代和老年代的大小分配。

ZhaoSimonone的博客 2847

G1 GC 全过程与核心原理介绍

G1GC 全过程与核心原理介绍 G1内存布局 G1垃圾回收器内存布局【链接:1】 G1垃圾回收全过程 整体过程介绍 G1垃圾回收整体分为2个阶段,分别是仅年轻代回收阶段(young-only)和空间回收阶段(space reclamation)。这两个阶段不断交替,相互转换。在年轻代回收阶段,每次回收都会有对象升级,当年龄达到阈值,就会变成老年代对象,放到old区。当old区占比达到一个设定的阈值,就会进入空间回收阶段,释放出空间,然后又进入年轻代回收。要进行一次空间回收,前提条件是找出空间中所有的垃圾,

weixin_42962086的博客 4045

总结:G1收集器

一、介绍 G1 GC全称是Garbage First Garbage Collector,垃圾优先垃圾回收器,简称G1 。 G1 收集器是一个面向服务器模式的垃圾收集器,主要为多CPU机器和大内存机器设计。它可以尽可能在达到高吞吐量同时满足垃圾收集暂停时间目标。G1 有以下几个优点: 1. 能够像CMS收集器一样跟应用线程并行操作 2.复制对象的同时对对象进行压缩和释放内存 3.灵活分配老年代,年轻代占比,不再固定。尽管G1堆内存仍然是分代的,但是同一个代的内存不再采用连续的内存结构。 4...

w2009211777的专栏 2966

深入了解G1 GC

G1 GC采用递增、并行运算、独占式运算的特征方式,并采用拷贝技术实现自身的压缩目标。同时,通过并行的多级标记方式缩短各层级(标记、重标记、清除等阶段)的停顿时间。 一. G1 GC概念简述 背景知识 G1回收器本着取代CMS回收器的长远目标,在JDK1.7中将G1回收器投入使用。 从堆结构可知,G1不要求整个Eden区、年轻代或者老年代包含的Region区在物理上都是连续的。 特点: ...

qq_44837912的博客 2049

【架构实战】JVM调优:GC选择与堆内存分配策略

JVM调优不是玄学,是建立在GC原理和数据分析上的工程实践。核心要点GC选型:小堆Parallel,中堆G1,大堆低延迟ZGC堆分配:-Xms=-Xmx,Young区占比35-40%,大堆用G1自动管理G1关键参数:MaxGCPauseMillis、IHOP、RegionSize大对象是Old区杀手——减少大对象分配或复用Buffer池Full GC是红线——出现必须排查根因,不是调参数掩盖调优流程:建立基线 → 确定目标 → 选择GC → 调参 → 验证 → 监控一句话总结。

分享技术应用、实践场景等,评论区开放技术难题讨论,共同成长进步。 733

G1GC参数说明

G1 GC是启发式算法,会动态调整年轻代的空间大小。 目标也就是为了达到接近预期的暂停时间。 G1提供了两种GC模式,YoungGC和Mixed GC,两种都是Stop The World(STW)的。 Young GC YoungGC主要是对Eden区进行GC,它在Eden空间耗尽时会被触发。 在这种情况下,Eden空间的数据移动到Survivor空间中,如果Survivor空间不够,Eden空间的部分数据会直接晋升到老年代空间。Survivor区的数据移动到新的Survivor区中,也有部分数据晋.

小安灬的博客 5515
上一篇: 京东大佬整理的亿级流量架构核心技术,助力智能时代,成就非凡
下一篇: MyBatis-Plus保姆级快速上手教程
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值