问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JVM G1参数

发布网友 发布时间:2022-11-10 07:40

我来回答

1个回答

热心网友 时间:2023-11-24 05:00

采用根搜索算法,通过一系列名为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。

1. 栈中引⽤的对象

2. 静态变量、常量引⽤的对象

3. 本地⽅法栈native⽅法引⽤的对象

1.标记-复制

2.标记-清理

3.标记-整理

G1采取了不同的策略来解决并行、串行和CMS收集器的碎片、暂停时间不可控制等问题

G1会优先回收垃圾对象特别多的分区,这样可以花费较少的时间来回收这些分区的垃圾

在年轻代回收期间,G1 GC 会调整其年轻代空间(eden 和存活空间大小)以满足目标。

在混合回收期间,G1 GC 会根据混合垃圾回收的目标次数调整所回收的年老代区域数量,并调整堆的每个区域中存活对象的百分比,以及总体可接受的堆废物百分比。

G1算法将堆划分为若干个区域(Region), 每个region可以是edon, survior, old区域,每个region大小相同为1M, 2M, 4M 2的幂次方大小,整个堆中默认有2048个region,每个Region默认按照512Kb划分成多个Card。

如果一个对象占用的空间大于一个region尺寸的一半,就会专门放入到humongous区域。G1划分了一个Humongous区,它用来专门存放巨型对象。如果一个H区装不下一个巨型对象,那么G1会寻找连续的H分区来存储。为了能找到连续的H区,有时候不得不启动Full GC。这种情况可以调整整个堆的大小,或者调整G1HeapRegionSize大小。

Remembered Set ,对应于一个region,采用point-in策略,记录该region中某card被其它region 的引用情况。RSet其实是一个Hash Table,Key是别的Region的起始地址,Value是一个集合,里面的元素是Card Table的Index。 进行垃圾回收时,如果Region1有根对象A引用了Region2的对象B,显然对象B是活的,如果没有Rset,就需要扫描整个Region1或者其它Region,才能确定对象B是活跃的,有了Rset可以避免对整个堆进行扫描。

cms中年老代也有rset,采用point-out策略,记录年老代中引用年轻代的对象,这样在ygc时就不用扫描整个年老代,只扫描年老代的rset。

G1MaxNewSizePercent 新生代最大值,默认值60%

G1MaxPauseTime 设置G1收集过程目标时间,默认值200ms

G1ReservePercent  预留百分之多少内存,防止晋升失败的情况,默认值是10

-XX:InitiatingHeapOccupancyPercent=45 – 整个堆栈使用达到百分之多少的时候,启动GC周期. 基于整个堆,不仅仅是其中的某个代的占用情况,G1根据这个值来判断是否要触发GC周期, 0表示一直都在GC,默认值是45(即45%满了,或者说占用了),启动mix gc

MaxRAMPercentage、InitialRAMPercentage、MinRAMPercentage 应用于docker容器中,根据docker容器内存大小指定堆的初始,最大,最小比例

ParallelRefProcEnabled 默认为false,并行的处理Reference对象,如WeakReference,除非在GC log里出现Reference处理时间较长的日志,否则效果不会很明显

显式的使用-Xmn设置年轻代的大小,会干预G1的默认行为。

G1就不会再考虑设定的暂停时间目标,所以本质上说,设定了年轻代大小就相当于禁用了目标暂停时间。

G1就无法根据需要增大或者缩小年轻代的小心。既然大小固定了,就无法在大小上做任何改变了。

为了避免堆内存被耗尽,虚拟机会触发一个混合的垃圾收集器,即mixed gc

除了回收整个young region,还会回收一部分的old region

主要分为以下几个步骤:

1. initial mark: 初始标记过程,整个过程STW,标记了从GC Root可达的对象

2. concurrent marking: 并发标记过程,整个过程gc collector线程与应用线程可以并行执行,标记出GC Root可达对象衍生出去的存活对象,并收集各个Region的存活对象信息

3. remark: 最终标记过程,整个过程STW,标记出那些在并发标记过程中遗漏的,或者内部引用发生变化的对象

4. clean up: 垃圾清除过程,如果发现一个Region中没有存活对象,则把该Region加入到空闲列表中

使用范围不一样

CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用

G1收集器收集范围是老年代和新生代

STW的时间

CMS收集器以最小的停顿时间为目标的收集器。

G1收集器可预测垃圾回收的停顿时间(建立可预测的停顿时间模型)

垃圾碎片

CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片

G1收集器使用的是“标记-整理”算法,进行了空间整合,降低了内存空间碎片

参考: https://www.jianshu.com/p/a3e6a9de7a5d

https://blog.csdn.net/u013380694/article/details/83341913

https://www.jianshu.com/p/ab54489f5d71?u_atoken=ca2d26ce-15a4-462b-9ee2-1d3dfca2d647&u_asession=01o91Z6M5SGuri8DAWL30xCUqcrFLi-kRD0-eOdne8XcfWhUbbJUSLGdkUER_tKV6ZX0KNBwm7Lovlpxjd_P_q4JsKWYrT3W_NKPr8w6oU7K9iRp8G_FBmi6Pj9SvVQQGhPpcarp92QKzyJKyYjREPlmBkFo3NEHBv0PZUm6pbxQU&u_asig=05wanIMMdgd47zVbFsycM4G3XiEWJOwnlBIedkc2SHAPEpD2_7vZwmCUEmowKET9soS-B3_YnquxJK1II_ufphdjR9EF5W4qBzbaQxa_DPpZ9KH_WWrcZkPnxOvsCZ39BhM8IrlznNwQ0UdcEEnqYpJeA7kV8xID-QE6N5IgXkZa79JS7q8ZD7Xtz2Ly-b0kmuyAKRFSVJkkdwVUnyHAIJzWGO6WuFWykqWadjrTYuDDlsepUSqnt1DPsu3oCQAS-WWPRPQyB_SKrj-61LB_f61u3h9VXwMyh6PgyDIVSG1W_sAjQ4f8f4yq0uqSzEZWJ75oMI4nT4HpKECo0exjcvsBtcqfKGjRA1xEkYqHbRvn5t3_la6lRJ-YPuMiqQMnxZmWspDxyAEEo4kbsryBKb9Q&u_aref=npKvxxWi1kDXXuw5mG2TYBN3CXA%3D

热心网友 时间:2023-11-24 05:00

采用根搜索算法,通过一系列名为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。

1. 栈中引⽤的对象

2. 静态变量、常量引⽤的对象

3. 本地⽅法栈native⽅法引⽤的对象

1.标记-复制

2.标记-清理

3.标记-整理

G1采取了不同的策略来解决并行、串行和CMS收集器的碎片、暂停时间不可控制等问题

G1会优先回收垃圾对象特别多的分区,这样可以花费较少的时间来回收这些分区的垃圾

在年轻代回收期间,G1 GC 会调整其年轻代空间(eden 和存活空间大小)以满足目标。

在混合回收期间,G1 GC 会根据混合垃圾回收的目标次数调整所回收的年老代区域数量,并调整堆的每个区域中存活对象的百分比,以及总体可接受的堆废物百分比。

G1算法将堆划分为若干个区域(Region), 每个region可以是edon, survior, old区域,每个region大小相同为1M, 2M, 4M 2的幂次方大小,整个堆中默认有2048个region,每个Region默认按照512Kb划分成多个Card。

如果一个对象占用的空间大于一个region尺寸的一半,就会专门放入到humongous区域。G1划分了一个Humongous区,它用来专门存放巨型对象。如果一个H区装不下一个巨型对象,那么G1会寻找连续的H分区来存储。为了能找到连续的H区,有时候不得不启动Full GC。这种情况可以调整整个堆的大小,或者调整G1HeapRegionSize大小。

Remembered Set ,对应于一个region,采用point-in策略,记录该region中某card被其它region 的引用情况。RSet其实是一个Hash Table,Key是别的Region的起始地址,Value是一个集合,里面的元素是Card Table的Index。 进行垃圾回收时,如果Region1有根对象A引用了Region2的对象B,显然对象B是活的,如果没有Rset,就需要扫描整个Region1或者其它Region,才能确定对象B是活跃的,有了Rset可以避免对整个堆进行扫描。

cms中年老代也有rset,采用point-out策略,记录年老代中引用年轻代的对象,这样在ygc时就不用扫描整个年老代,只扫描年老代的rset。

G1MaxNewSizePercent 新生代最大值,默认值60%

G1MaxPauseTime 设置G1收集过程目标时间,默认值200ms

G1ReservePercent  预留百分之多少内存,防止晋升失败的情况,默认值是10

-XX:InitiatingHeapOccupancyPercent=45 – 整个堆栈使用达到百分之多少的时候,启动GC周期. 基于整个堆,不仅仅是其中的某个代的占用情况,G1根据这个值来判断是否要触发GC周期, 0表示一直都在GC,默认值是45(即45%满了,或者说占用了),启动mix gc

MaxRAMPercentage、InitialRAMPercentage、MinRAMPercentage 应用于docker容器中,根据docker容器内存大小指定堆的初始,最大,最小比例

ParallelRefProcEnabled 默认为false,并行的处理Reference对象,如WeakReference,除非在GC log里出现Reference处理时间较长的日志,否则效果不会很明显

显式的使用-Xmn设置年轻代的大小,会干预G1的默认行为。

G1就不会再考虑设定的暂停时间目标,所以本质上说,设定了年轻代大小就相当于禁用了目标暂停时间。

G1就无法根据需要增大或者缩小年轻代的小心。既然大小固定了,就无法在大小上做任何改变了。

为了避免堆内存被耗尽,虚拟机会触发一个混合的垃圾收集器,即mixed gc

除了回收整个young region,还会回收一部分的old region

主要分为以下几个步骤:

1. initial mark: 初始标记过程,整个过程STW,标记了从GC Root可达的对象

2. concurrent marking: 并发标记过程,整个过程gc collector线程与应用线程可以并行执行,标记出GC Root可达对象衍生出去的存活对象,并收集各个Region的存活对象信息

3. remark: 最终标记过程,整个过程STW,标记出那些在并发标记过程中遗漏的,或者内部引用发生变化的对象

4. clean up: 垃圾清除过程,如果发现一个Region中没有存活对象,则把该Region加入到空闲列表中

使用范围不一样

CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用

G1收集器收集范围是老年代和新生代

STW的时间

CMS收集器以最小的停顿时间为目标的收集器。

G1收集器可预测垃圾回收的停顿时间(建立可预测的停顿时间模型)

垃圾碎片

CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片

G1收集器使用的是“标记-整理”算法,进行了空间整合,降低了内存空间碎片

参考: https://www.jianshu.com/p/a3e6a9de7a5d

https://blog.csdn.net/u013380694/article/details/83341913

https://www.jianshu.com/p/ab54489f5d71?u_atoken=ca2d26ce-15a4-462b-9ee2-1d3dfca2d647&u_asession=01o91Z6M5SGuri8DAWL30xCUqcrFLi-kRD0-eOdne8XcfWhUbbJUSLGdkUER_tKV6ZX0KNBwm7Lovlpxjd_P_q4JsKWYrT3W_NKPr8w6oU7K9iRp8G_FBmi6Pj9SvVQQGhPpcarp92QKzyJKyYjREPlmBkFo3NEHBv0PZUm6pbxQU&u_asig=05wanIMMdgd47zVbFsycM4G3XiEWJOwnlBIedkc2SHAPEpD2_7vZwmCUEmowKET9soS-B3_YnquxJK1II_ufphdjR9EF5W4qBzbaQxa_DPpZ9KH_WWrcZkPnxOvsCZ39BhM8IrlznNwQ0UdcEEnqYpJeA7kV8xID-QE6N5IgXkZa79JS7q8ZD7Xtz2Ly-b0kmuyAKRFSVJkkdwVUnyHAIJzWGO6WuFWykqWadjrTYuDDlsepUSqnt1DPsu3oCQAS-WWPRPQyB_SKrj-61LB_f61u3h9VXwMyh6PgyDIVSG1W_sAjQ4f8f4yq0uqSzEZWJ75oMI4nT4HpKECo0exjcvsBtcqfKGjRA1xEkYqHbRvn5t3_la6lRJ-YPuMiqQMnxZmWspDxyAEEo4kbsryBKb9Q&u_aref=npKvxxWi1kDXXuw5mG2TYBN3CXA%3D
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
推荐一款在卧室听的音响,最好带CD,带收音机,可插U盘,价格1000以内!尽量... 求问,近几年还会有类似于声之形、你的名字这样的动漫电影么w_百度... 苦学包括什么 北京世纪百奥科技有限公司怎么样? 居住证积分需要哪些材料 上海办居住证积分需要什么资料 居住证积分有哪些材料 如何建立良好的家庭情感氛围 如何让家庭氛围更快乐 如何营造一个欢乐轻松的家庭氛围呢? 拼多多直通车提高出价点击率会上涨吗 格林童话的内容(格林童话故事书) 问一个特脑残的问题 草莓为啥要叫草莓啊 表砸我 绣球花几月扦插 长歌行的古文怎么念? 电视机尺寸一览表 电视机尺寸是多大 我打败末影龙没有,爆出龙蛋呢? 农村新农合怎么缴费 哪位大侠能用易语言编写新农合软件 医疗管理系统划价网页门诊处方单删除了怎么办? 为什么人紧张时会心跳加速 汽车epc灯亮是什么意思 车epc灯亮是什么意思? 车的epc灯亮是什么意思? ipadmini4最新版本是多少 新宝马MINI Cooper系列介绍 前海人寿保险股份有限公司上海分公司怎么样? 宇宙大爆炸究竟是不是真实的?为什么? 想学rap,无基础,听什么歌好,最好不要国语的 御芷坊宝宝霜好还是贝倍舒好用 解决docker容器生成的日志文件过大的方法 慈溪姓乐有多少? 慈溪市哪个镇分布何姓? 电脑风扇声音时大时小怎么办 49个数字,出6个数字,自己出2个数字,能在这6个里面,能中的概率是多少? 49选6中3的概率 1至49共49个数字,随机选出6个不同的数字出来。 彩票49选6中一等奖概率,没特别号码 一种彩票,在49个数字里面摇出6或者7个中奖号码,购彩者选5个号码,5号号码全在摇出奖号里面的概率分别多少 全国注册造价工程师考试什么时候开始 docker是干什么的 毛衣扎人处理最有效的方法 新买的毛衣扎人,怎么办 您好。我儿子的包皮上呦一块发红,并且起皮!这应该怎么办? 龟头脱皮,红肿,是怎么回事 张真源腰伤纪录片是哪一期 光环下的少年12期分别是什么? 光环下的少年纪录片顺序 严浩翔贺峻霖刘耀文宋亚轩看鬼片出自哪里? 我是一个书迷450字作文