java 并g1_JVM G1详解

article/2025/9/1 9:16:01

java程序性能

当我们调优java程序时,通常的目标有两个:

响应能力 或者 吞吐量

响应能力

响应能力指一个程序或者系统对请求的是否能够及时响应。

比如:

一个桌面UI能多快的响应一个事件;

一个网站能够多快返回一个页面请求;

数据库能够多快返回查询的数据;

对于这类对响应能力敏感的场景,长时间的停顿是无法接受的。

吞吐量

吞吐量关注的是,在一个指定的时间内,最大化一个应用的工作量。

如下方式来衡量一个系统吞吐量的好坏:

在一小时内同一个事务(或者任务、请求)完成的次数(tps)。

数据库一小时可以完成多少次查询;

对于关注吞吐量的系统,卡顿是可以接受的,因为这个系统关注长时间的大量任务的执行能力,单次快速的响应并不值得考虑。

应用程序运行实际/实际时间(开始时间戳-结束时间戳)

G1 Garbage Collector

G1垃圾收集器

g1收集器是一个面向服务端的垃圾收收集器,适用于多核处理器、大内存容量的服务端系统。

它满足短时间gc 停顿的同时达到一个高的吞吐量。JDK7以上版本适用。

g1收集器的设计目标:

与应用线程同时工作,几乎不需要stop-the-world(与CMS类似);

整理剩余空间,不产生内存碎片;(CMS只能在full-GC时,用stop-the-world整理碎片内存)

GC停顿更加可控;

不牺牲系统的吞吐量;

gc不要求额外的内存空间(CMS需要预留空间存储浮动垃圾);

G1的设计规划,是要替换掉CMS。

G1在某些方便弥补了CMS的不足,比如,CMS使用的是mark-sweep算法,自然会产生内存碎片;然而G1基于copying算法,高效的整理剩余内存,而不需要使用free-list去管理内存碎片。

另外,G1提供了更多手段,以达到对gc停顿时间可控。

之前的GC收集器对Heap的划分:

175be517415d9834f51e3bda3343efea.png

G1对Heap的划分:

be838b9daada208863f8db15ddf9c849.png

heap被划分为一个个相等的不连续的内存区域(regions),每个region都有一个分代的角色:eden、survivor、old(old还有一种细分 humongous,用来存放大小超过 region 50%以上的巨型对象)。

但是对每个角色的数量并没有强制的限定,也就是说对每种分代内存的大小,可以动态变化(默认年轻代占整个heap的5%)。

G1最大的特点就是高效的执行回收,优先去执行那些大量对象可回收的区域(region)。

另外,G1使用了gc停顿可预测的模型,来满足用户设定的gc停顿时间,根据用户设定的目标时间,g1会自动的选择哪些region要清楚,一次清除多少个region。

G1从多个region中复制存活的对象,然后集中放入一个region中,同时整理、清除内存(copying收集算法)。

注意对比之前的垃圾收集器(主要是CMS):

对比使用mark-sweep的CMS,g1使用的copying算法不会造成内存碎片;

对比ParallelScavenge(基于copying )、ParallelOld收集器(基于mark-compact-sweep),Parallel

会对整个区域做整理导致gc Pause会比较长,而g1只是特定的整理几个region。

值得注意:g1不是一个实时的收集器,与parallelScavenge一样,对gc 停顿时间的设置并不绝对生效,只是g1有较高的几率保证不超过设定gc停顿时间。与之前的gc收集器对比,g1会根据用户设定的gc停顿时间,智能评估一下哪几个region需要被回收可以满足用户设定。

G1内存的分配

1.TLAB(TLAB占用年轻代内存). 默认使用TLAB加速内存分配,之前文章已经讲过,不赘述。

2.Eden.如果TLAB不够用,则在Eden中分配内存生成对象。

3.Humongous.如果对象需要的内存超过一个region的50%以上,会忽略前两个步骤直接在老年代的humongous中分配(连续的Region)。

何时使用G1(-XX:+UseG1GC)

1.大内存中为了达到低gc延迟.

比如:heap size >=6G,gc pause <=0.5s

2.FullGC时间太长,或者太频繁。

调优参数:

-XX:MaxGCPauseMillis=200

用户设定的最大gc 停顿时间,默认是200ms.

-XX:InitiatingHeapOccupancyPercent=45

默认是45,也就是heap中45%的容量被使用,则会触发concurrent gc。

G1垃圾回收步骤详解

G1提供了两种GC模式,Young GC和Mixed GC,两种都是Stop The World(STW)的

G1 Young GC(STW)

1.当eden数据满了,则触发g1 YGC

2.并行的执行:

YGC 将 eden region 中存活的对象拷贝到survivor,或者直接晋升到Old Region中;将Survivor Regin中存活的对象拷贝到新的Survivor或者晋升old region。

3.计算下一次YGC eden、Survivor的尺寸

G1 Mix GC

在G1 GC中,它主要是为Mixed GC提供标记服务的,并不是一次GC过程的一个必须环节。global concurrent marking的执行过程分为五个步骤:

初始标记(initial mark,STW)

在此阶段,G1 GC 对根进行标记。该阶段与常规的 (STW) 年轻代垃圾回收密切相关。

根区域扫描(root region scan)

G1 GC 在初始标记的存活区扫描对老年代的引用,并标记被引用的对象。该阶段与应用程序(非 STW)同时运行,并且只有完成该阶段后,才能开始下一次 STW 年轻代垃圾回收。

并发标记(Concurrent Marking)

G1 GC 在整个堆中查找可访问的(存活的)对象。该阶段与应用程序同时运行,可以被 STW 年轻代垃圾回收中断

最终标记(Remark,STW)

该阶段是 STW 回收,帮助完成标记周期。G1 GC 清空 SATB 缓冲区,跟踪未被访问的存活对象,并执行引用处理。

清除垃圾(Cleanup,STW)

在这个最后阶段,G1 GC 执行统计和 RSet 净化的 STW 操作。在统计期间,G1 GC 会识别完全空闲的区域和可供进行混合垃圾回收的区域。清理阶段在将空白区域重置并返回到空闲列表时为部分并发。

一、G1收集器简介G1收集器(JDK1.7u4正式出现)

f4bc0f02cb56ef5ae78a91ac46e6f781.png

普遍存在:全内存扫描问题。

传统的收集器不能满足高内存高cpu的要求,这才是G1产生的原因。

2.G1区域划分

5aed8597176ec4d4d185a57387ac6ac3.png

在G1之中不再区分所谓的年轻代、老年代内存空间,所有的内存空间就是一块。但是要划分出不同的子区域。

二、G1收集策略

虽然在G1收集器里面将整个内存区域都混合在了一起,但是其本身依然也是在小范围内要进行年轻代与老年代的区分,也就是说依然会采用不同的GC方式来处理不同的区域。

G1——年轻代有对象

8d231907e0dffd62bb609b996b1a35d6.png

G1——年轻代对象被回收

dd66a45ddd50b43a4f8552bcf80848d2.png

所有的垃圾内存的保存区域有可能会被清空后重新分配。

但是老年代的处理流程不一样了,因为任何时候如果要想标注老年代的不用内存空间,都需要进行一些暂停,而G1之中的最大好处它不用进行全内存扫描,只需要按照区域来进行扫描即可。

G1老年代回收

d0f10a78477598b18750f70bf77d72d4.png

G1——老年代,标记阶段

4945ad9ed6dff6bc72af65b6396b1576.png

G1——老年代,根区域扫描

aa47c4a4d93d4ed74ae87f468164eedb.png

G1——老年代,重新标记阶段

0e82ef973ae9004bdb14fee89d2e1e9c.png

G1——老年代,清理、拷贝阶段

b824572ec942fb3fb3104e58056ae306.png

G1——清理完毕

f943171dfbcf65d7d599d2ccfe1f446d.png

三、G1相关处理参数

清楚了G1的基本运行原理之后,那么下面就需要进行一些G1的配置。(需慎重使用,可能会有一些问题出现)

G1收集器参数

b57d55f824232cf8bf2c963c629366f1.png

范例:使用G1回收器java -Xmx10m -Xms10m -XX:+UseG1GC -XX:+PrintGCDetails TestDemo1

G1处理和传统的垃圾收集策略是不同的,关键的因素是它将所有的内存进行了子区域的划分。

g1 对老年代回收-总结:

1.并发标记阶段(Concurrent Marking Phase):

在不产生stop-the-world,与程序进程并发的情况下,活跃度(可达性分析)被分析出来。

活跃度越低,代表回收的效率越高,越值得优先回收。

2.复制、清理阶段(Copying/Cleanup Phase)

年轻代、老年代在这个阶段同时被回收掉。老年代被回收的region,是根据这个region的存活度来选择的。


http://chatgpt.dhexx.cn/article/8sIhtWGq.shtml

相关文章

垃圾回收之G1收集过程

G1 中提供了 Young GC、Mixed GC 两种垃圾回收模式&#xff0c;这两种垃圾回收模式&#xff0c;都是 Stop The World(STW) 的。 G1 没有 fullGC 概念&#xff0c;需要 fullGC 时&#xff0c;调用 serialOldGC 进行全堆扫描&#xff08;包括 eden、survivor、o、perm&#xff0…

G1调优分析

目录 1、畅想GC的目标 2、jvm调优的目标 3、GC调优时机 4、垃圾收集器的选择 5、G1调优策略 6、G1垃圾收集实践 6.1、JVM自动选择垃圾收集器 6.2、G1垃圾收集 6.3、GC日志分析 7、小结 前言 c和java之间有一堵由内存动态分配和垃圾收集技术所围成的墙&#xff0c;墙外面的人想进…

JVM垃圾回收器G1详解

1、概述 在我们应用程序所应对的业务越来越庞大、复杂&#xff0c;用户越来越多&#xff0c;没有GC就不能保证应用程序正常进行&#xff0c;而经常造成STW的GC又跟不上实际的需求&#xff0c;我们需要不断地尝试对GC进行优化。G1&#xff08;Garbage-First&#xff09;垃圾回收…

G1垃圾回收器

1、最大堆大小 G1管理的最大堆大小为64G。每个Region的大小通过 -XX:G1HeapRegionSize 来设置&#xff0c;大小为 1~32MB &#xff0c;默认最多可以有2048个Region&#xff0c;G1能管理的最大堆内存是 32MB*204864G 。 使用G1垃圾回收器最小堆内存应为 1MB*20482GB &#xff…

ZGC都出来了,你还不懂G1?

概念 G1&#xff08;Garbage-First Collector&#xff09;是一种垃圾回收算法&#xff0c;最早在JDK 6 Update 14中作为实验性功能加入&#xff0c;并在JDK 7 Update 4正式JDK&#xff0c;之后在JDK 9 中成为默认垃圾回收算法&#xff0c;在JDK 10中优化了Full GC性能。 G1是一…

G1详解

一 G1收集器 g1收集器是一个面向服务端的垃圾收集器适用于多核处理器、大内存容量的服务端系统。 它满足短时间gc停顿的同时达到一个较高的吞吐量。 JDK7以上版本适用 “ 先介绍两个概念&#xff1a;吞吐量和响应能力&#xff0c;响应能力和吞吐量是评价一个系统的两个重要指标…

G1垃圾回收器详解

文章目录 前言一、思考问题二、官方文档三、基本介绍四、G1的内存模型五、G1的标记过程六、G1的垃圾回收1、G1过程梳理2、Young GC3、Mixed GC4、Full GC 七、参数介绍八、分析各阶段触发时机根据GC日志分析Young GC的触发时机根据GC日志分析并发标记的触发时机根据GC日志分析M…

G1 GC

G1GC基本概念 G1 GC可以看做是CMS GC的重大升级改造G1 GC的全称是Garbage-First&#xff0c;意为垃圾优先&#xff0c;哪一块的垃圾最多就优先清理他。G1 GC最主要的设计目标是&#xff1a;将STW停顿的时间和分布&#xff0c;变成可预期且可配置的。&#xff08;默认200ms&…

G1垃圾回收器-----基本知识及原理解析

G1介绍&#xff08;Garbage first&#xff09; G1主要面向的是服务端的垃圾回收器。在G1之前&#xff0c;JVM的主要垃圾回收器采用的是物理分代的思想&#xff0c;将内存区域严格的划分成年轻代&#xff08;young GC&#xff09;和老年代&#xff08;major GC&#xff09;&…

可控硅BT136典型应用电路

1&#xff0e;双向可控硅SCR可根据负载功率大小选择97A6&#xff08;约1A&#xff09;、TLC336A&#xff08;约3A&#xff09;、BT136-500D&#xff08;约6A&#xff09;中的一个&#xff0c;选择原则是触发电流要小于25mA。 2&#xff0e;C4取值在0.1 ~ 0.47uF之间&#xff0c…

全能电子地图实时路况_全能SUV与城市SUV的区别在哪?日产奇骏对比本田皓影

在如今的市场中&#xff0c;越来越多的车企将重点放在SUV车型中&#xff0c;尤其今年大量家用SUV涌入市场&#xff0c;特别是紧凑级SUV将这片市场瓜分的“支离破碎”。即使车型越来越多&#xff0c;市场被瓜分的越来越小&#xff0c;但是在很多消费者心中&#xff0c;几个主流品…

音质卓越颜值在线,五款高人气头戴式HIFI音质蓝牙耳机排名

随着我们生活水平的逐渐提高,我们对科技产品的要求也就越来越高,就拿耳机来说,对于很多上班族或是年轻人耳机绝对是出门或是旅行的必备品之一,没有音乐的路途那绝对是缺少了灵魂,那自然耳机的地位也就越发的重要。无线,音效,小巧,这几个因素也就成为了我们选择耳机的最…

服务器购买及宝塔部署环境说明(阿里云为例)

服务器相关知识 为什么程序员都需要自己的服务器&#xff1f; 1、你作为一个程序员&#xff0c;必须要发部自己的网站和项目&#xff01; 2、联系Linux的操作。 3、自己的远程仓库、远程数据库、远程tomcat…都可以搭建在服务器上 4、联系&#xff0c;Linux进行任意的环境…

Linux学习一概述和环境搭建(入门概述,环境搭建,走近Linux系统)

此文档学习来自b站遇见狂神说&#xff0c;自己做的学习笔记整合。 狂神说Linux 继续Java全栈开发的Linux&#xff0c;而不是运维级别&#xff01; 我们为什么要在这个时间学习Linux&#xff1f;Java全栈开发的我们要掌握哪些知识&#xff1f;需要准备什么工作&#xff1f; J…

CK6855M1蓝牙离线语音识别灯控模组使用说明书

CK6855M1蓝牙离线语音识别灯控模组使用说明书 一、功能说明 CK6855M1模块是一款专为灯具照明产品设计的离线蓝牙语音识别模组。模组支持红外遥控接收&#xff0c;支持RGBWY灯控制&#xff0c;支持无极调光&#xff0c;支持AD按键调灯以及音频上下曲的控制&#xff0c;支持5.1…

为什么P2P模式下载的人越多速度越快,为什么P2P伤害机械硬盘

台风来临前的夜晚&#xff0c;有点激动不想睡觉&#xff0c;看了几个电影&#xff0c;日本恐怖片&#xff0c;台风雨夜&#xff0c;非常不错&#xff0c;P2P很流畅&#xff0c;观察IP地址大量也是附近的&#xff0c;江浙沪&#xff0c;难道也都在迎台风看电影&#xff1f; 大家…

伊人在线高清视频 index.php,《天元》“畅音阁”首发飞行技能视频

直面一款网游给人感觉的优异度最大成分中的重中之重就是第一感——“视听”印象。一直以来&#xff0c;游戏音乐以及画面成分的优异华丽与否直接关系到了玩家对于此款游戏的好感度&#xff0c;无可厚非。而《天元》特别针对于此&#xff0c;倾情打造出一篇关于对于其所有“视听…

迅雷跃居全球BT市场第一

据torrentfreak报道&#xff0c;根据早些时候海盗湾公布的一些数据表明&#xff0c;全球BT软件的使用者&#xff0c;大约有三分之一来自中国&#xff0c;而来自美国的仅有8%&#xff0c;迅雷成为全球BitTorrent市场份额最大的客户端。 迅雷本身并不是一个专门使用P2P的BT客户端…

11个资源强大的网站!知乎超20万人强烈推荐,再也不怕资源难找

在我们日常工作学习中难免就需要在网站搜索资料&#xff0c;这时候一定需要一个能够帮你搜索一切你想要的资源&#xff0c;从而为你剩下一大半时间&#xff0c;那么今天为大家整理了11个超级好用的黑科技资源搜索网站&#xff0c;帮你解决因为上网找不到合适的资源而发愁&#…

Linux6.8搭建sftp服务

最近因公司工作需要用到sftp服务器&#xff0c;参考网上各种方法&#xff0c;但被网上各种方法尤其是权限设置问题搞得晕头转向&#xff0c;现在将自己搭建过程总结了一下&#xff0c;提供给大家希望有所帮助。 sftp是Secure FileTransfer Protocol的缩写&#xff0c;安全文件传…