范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

不管卷不卷,面试还是得问问你G1原理

  所有的垃圾回收器的目的都是朝着减少STW的目的而前进,G1(Garbage First)回收器的出现颠覆了之前版本CMS、Parallel等垃圾回收器的分代收集方式,从2004年Sun发布第一篇关于G1的论文后,直到2012年JDK7发布更新版本,花了将近10年的时间G1才达到商用的程度,而到JDK9发布之后,G1成为了默认的垃圾回收器,CMS也变相地相当于被淘汰了。  G1结构
  G1抛弃了之前的分代收集的方式,面向整个堆内存进行回收,把内存划分为多个大小相等的独立区域Region。
  一共有4种Region:  自由分区Free Region 年轻代分区Young Region,年轻代还是会存在Eden和Survivor的区分 老年代分区Old Region 大对象分区Humongous Region
  每个Region的大小通过 -XX:G1HeapRegionSize 来设置,大小为1~32MB,默认最多可以有2048个Region,那么按照默认值计算G1能管理的最大内存就是32MB*2048=64G。
  对于大对象的存储,存在Humongous概念,对G1来说,超过一个Region一半大小的对象都被认为大对象,将会被放入Humongous Region,而对于超过整个Region的大对象,则用几个连续的Humongous来存储(如下图H区域)。
  G1优势
  上面我们也提到,垃圾回收器的最终目的都是为了减少STW造成的停顿,比如之前老的垃圾回收器CMS这种带来的停顿时间是不可预估的。
  而G1最大的优势就在于 可预测的停顿时间模型 ,我们可以自己通过参数-XX:MaxGCPauseMillis 来设置允许的停顿时间(默认200ms),G1会收集每个Region的回收之后的空间大小、回收需要的时间,根据评估得到的价值,在后台维护一个优先级列表,然后基于我们设置的停顿时间优先回收价值收益最大 的Region。
  那么,这个可预测的停顿时间模型怎么计算和建立的?主要是基于 衰减平均值 的理论基础,衰减平均是一种数学方法,用来计算一个数列的平均值,给近期的数据更高的权重,强调近期数据对结果的影响,代码如下: hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp double get_new_prediction(TruncatedSeq* seq) {   return MAX2(seq->davg() + sigma() * seq->dsd(),               seq->davg() * confidence_factor(seq->num())); }
  davg 表示衰减值
  sigma 表示一个系数,代表信贷度,默认值为0.5
  dsd 表示衰减标准偏差
  confidence_factor 表示可信度系数,用于当样本数据不足(小于5个)时取一个大于1的值,样本数据越少该值越大。
  基于这个模型,G1希望根据用户设置的停顿时间(只是期望时间,尽量努力在这个范围内完成GC)来选择需要对哪些Region进行回收,能回收多大空间。
  比如过去10次回收10G内存花费1s,如果预设的停顿时间是200ms,那么就最多可以回收2G的内存空间。  空间分配&扩展
  既然G1还是存在新生代和老年代的概念,那么新生代和老年代的空间是怎么划分的呢?
  在G1中,新增了两个参数 G1MaxNewSizePercent 、G1NewSizePercent ,用来控制新生代的大小,默认的情况下G1NewSizePercent 为5,也就是占整个堆空间的5%,G1MaxNewSizePercent 默认为60,也就是堆空间的60%。
  假设现在我们的堆空间大小是4G,按照默认最大2048个Region计算,每个Region的大小就是2M。
  初始新生代的大小那么就是200M,大约100个Region格子,动态扩展最大就是60%*4G=2.4G大小。
  不过显然,事情不是这么简单,实际上初始化新生代的空间大小逻辑还是挺复杂的。
  首先,我们通过原有参数 -Xms 设置初始堆的大小,-Xmx 设置最大堆的大小还是生效的,可以设置堆的大小。 可以通过原有参数 -Xmn 或者新的参数G1NewSizePercent 、G1MaxNewSizePercent 来设置年轻代的大小,如果设置了-Xmn 相当于设置G1NewSizePercent =G1MaxNewSizePercent 。 接着看是不是设置了 -XX:NewRatio (表示年轻代与老年代比值,默认值为2,代表年轻代老年代大小为1:2),如果1 都设置了,那么忽略NewRatio ,反之则代表G1NewSizePercent =G1MaxNewSizePercent ,并且分配规则还是按照NewRatio 的规则。 如果只是设置了 G1NewSizePercent 、G1MaxNewSizePercent 中的一个,那么就按照这两个参数的默认值5%和60%来设置。 如果设置了 -XX:SurvivorRatio ,默认为8,那么Eden和Survivor还是按照这个比例来分配
  按照这个规则,我们新生代和老年代的空间分配基本就完成,如果说新生代走默认的规则,每次动态扩展空间大小怎么办?
  有一个参数叫做 -XX:GCTimeRatio 表示GC时间与应用耗费时间比,默认为9,就是说GC时间和应用时间占比超过10%才进行扩展,扩展比例为20%,最小不能小于1M。 回收过程
  G1的回收过程分为以下四个步骤:  初始标记:标记GC ROOT能关联到的对象,需要STW 并发标记:从GCRoots的直接关联对象开始遍历整个对象图的过程,扫描完成后还会重新处理并发标记过程中产生变动的对象 最终标记:短暂暂停用户线程,再处理一次,需要STW 筛选回收:更新Region的统计数据,对每个Region的回收价值和成本排序,根据用户设置的停顿时间制定回收计划。再把需要回收的Region中存活对象复制到空的Region,同时清理旧的Region。需要STW。
  总的来说这是一个偏向记忆的回收过程,知道就行了。
  相对于之前我们存在分代概念的GC来说,G1其实也是类似的过程,总体可以分为这两种:  年轻代GC,年轻代Region在超过我们默认设置的最大大小之后就会触发GC,还是用的我们熟悉的复制算法,Eden和Survivor来回倒腾,这里不再赘述。 Mixed GC混合回收,混合回收类似于之前我们的Full GC概念,既会回收年轻代的Region,也会回收老年代的Region,还有我们新的Humongous大对象区域。触发规则根据参数 -XX:InitiatingHeapOccupancyPercent (默认45%)值,也就是说老年代Region达到整个堆内存的45%时触发Mixed GC。其他问题
  上面应该把基本概念都解释完了。
  比如什么是G1?G1有什么特点?他的优点是什么?划分Region后怎么分配空间?怎么进行垃圾回收?什么时候进行YGC?什么时候进行FGC?可靠的停顿时间模型建立方式?
  除此之外,其实还有一些较为复杂的问题,比如之前我们说分代收集有跨代引用的问题,划分Region之后应该也有对不对,那怎么解决的?
  还有之前我们说并发收集阶段怎么解决用户线程和收集线程互不干扰的?
  这些更深一点的问题其实在现在已经卷到需要问三色标记了吗?已经说到了很多了,下面我们再详细点说明下在G1中的一些不同点。  记忆集
  在这篇文章中我们提到过一次关于Remembered Set的概念,为了避免GC时扫描整个堆内存,用来标志哪些区域存在跨代引用,对于G1来说也一样,只不过G1的记忆集会更复杂一点。
  每个Region中都存在一个Hash Table结构的记忆集,Key为其他Region的起始地址,Value是其他Card Table卡表的索引集合。
  原来我们的卡表指向的是卡页的内存地址段,代表我引用了谁,现在的记忆集则是代表着谁引用了我,因此收集的过程会更复杂一点,并且需要额外的10%~20%的堆内存空间来维持。
  维护记忆集的方式也和卡表类似,通过 写屏障 来实现。 原始快照SATB
  在三色标记中我们也提到过,并发标记用户线程和收集线程一起工作会产生问题,解决方案CMS使用的是增量更新,G1则是用原始快照。  总结
  写这些东西比较费劲,因为总在想在理解的基础上怎么写的更通俗易懂,但是发现好像并不容易,因为自己也都是看完没过多久就忘记了,所以记录下来,能看懂就行了,实在不行就去看书。
  周老师的深入Java虚拟机写的比较简单,很多东西要去搜资料和书结合看才能看明白,另外一本书写的也不是很好,作者感觉只是堆砌知识点,看起来很费劲,美团写的那篇文章也是一大堆名词,不知道的人看的简直蛋疼。
  我应该,比他们写的更通俗一点就好了?  参考:
  彭成寒《JVM G1源码分析和调优》
  周志明《深入理解Java虚拟机第三版》
  美团:Java Hotspot G1 GC的一些关键技术

12年前退出德云社,刘云天和曹云金三上春晚,如今落魄到街头卖花说起刘云天,你可能一时想不起来他是谁,但是提起曹云金的捧哏,你大概就对刘云天有些印象,毕竟这一对相声演员曾经红极一时,还连续上过3年央视春晚。最近,38岁的刘云天在直播里诉苦,透露张馨予的后花园火了4年前嫁对了人,她终于活成了人人羡慕的小仙女作者玄圭来源婚姻与家庭杂志IDhunyinyujiating99日前,张馨予在社交平台上和大家分享了自己家的满园春色。在正文中,张馨予这样写道美好的五月,迎接月季的最美时刻,枇杷桃杠杆三位女主,三种结局,陈昕死而复生,王海丽意难平杠杆是由郭京飞于毅佟丽娅熊黛林钱晓蕴张丰毅等主演的经侦商战剧,该剧讲述了经侦队长萧剑与金融天才胥枫,联手破获国际跨国洗钱案的故事。这部剧虽然以男人的视角展开,但是里边的女性角色同样她是宝莲灯里的第一美人,本可红过一线,因为太低调被人遗忘要说国产电视剧的巅峰时期,一部部优秀作品不停地涌现,大家都很熟悉的还珠格格武林外传和爱情公寓等等,先不论口碑和风评,至少收视率一直都是国内电视剧的佼佼者了,不过说到以前有名有人气的新游记师父真被妖怪抓走了?一路求生是难还是难不知不觉中,严敏导演的新综艺新游记也已经播出了五期了,五期时间说长不长,说短不短,一些节目形式和嘉宾参加节目的精神状态在五期节目中还是能看的很真切。新游记和西游记既然沾边,那么唐僧离婚4年后再看玖月奇迹,才发现王小玮在离开王小海时,为何坚定2008年,王小玮(女)和王小海(男)在星光大道的舞台上,演唱了一首和他们组合同名的歌曲玖月奇迹,并拿下这一年的年度总冠军。彼时很多观众看到他们的名字时,都猜想难道他们是兄妹组合?王牌对王牌名场面沈腾贾玲超默契,何晟铭敬业,魏翔太尴尬那些唱衰沈腾贾玲的人,该醒一醒了!最新一季王牌对王牌已经完美收官,沈腾贾玲依然是全场镜头最多的常驻嘉宾,华晨宇和关晓彤,参加了这么多季,虽然放开了很多,但还是综艺感偏弱。如果没有沈漫改剧异人之下杀青,彭昱畅侯明昊主演,新人出演冯宝宝小说影视化已经屡见不鲜了,最近还开始流行起漫改剧,高人气漫画异人之下也难逃影视化的命运,被改编成了电视剧和电影两个不同版本,而且剧版已经官宣杀青了。当初演员阵容官宣的时候,就引来了请叫我总监被骂惨的苏维然,戏内大渣男,戏外是完美男神请叫我总监凭借戏剧化的剧情走向成为最近热议的话题中心。而回顾这部剧播出后的口碑反响,也看得出观众对这部剧的误会。刚开始,不少网友都觉得请叫我总监是一部霸道总裁爱上小秘书的狗血偶像剧再看蜗居宋思明到死都不知,海藻留他车上那一滴血的真相郭海藻跟宋思明的孩子没了,还被摘除了子宫。宋思明听闻海藻出事,立马离开单位,在飞奔医院的路上,被警察追击,最终车毁人亡。宋思明死得很惨,触犯道德和法律底线的人,就该受到惩罚,所以他45集海之谣今晚开播,央视力推,3大看点,真正的王炸来了?年代剧可是国产影视行业里当之无愧的大热门,经典的年代剧不乏父母爱情闯关东这样的佳作。这几年里更是涌现出了大江大河系列鸡毛飞上天这样的爆款,剧中质感满满的服化道和场景搭建都给观众留下
封面会客厅朱时茂和刘晓庆上演黄昏恋合作可以说是天衣无缝当清晨的阳光洒在北京的某一所公园内时,一个头发些许花白戴着金丝边眼镜的大爷吕大夫,就出现在广场中。他喜欢在公园沾着清水写毛笔字,也喜欢悄悄凝视着在一旁放声高歌的白奶奶,心生爱慕却从黄金搭档风雨同舟17年!40岁玲花草莓裙可爱,曾毅劈叉坐姿真豪放玲花和曾毅的凤凰传奇组合是很多观众喜欢的一对搭档,从2004年签约孔雀唱片,就开始由酷火组合改成如今这个名字,这一唱就是17年,堪称黄金组合。玲花来自内蒙古大草原,嗓音豪放性格开朗父母爱情江德福安杰在晚上干革命,斗智斗勇一辈子父母爱情是由孔笙执导,刘静编剧,郭涛梅婷刘琳任帅等主演的家庭情感剧。真正的爱情可以经得起生活的洗礼,而后依然鲜活,不会在平凡的生活中归于尘土。该剧主要讲述了海军军官江德福和资本家小14岁开演唱会,一首歌赚2亿,销声匿迹的郑源去哪了?文痞卡丘影视2005年,情歌王子的这首一万个理由一经推出就大受欢迎。那个年代体现一首歌的受欢迎程度,就是看人们把它当作手机彩铃的次数多不多,而一万个理由是当年当之无愧的彩铃榜第一名刀郎从爆红到销声匿迹,他有怎样的心路历程?2004年中国乐坛不能不提这个火得一塌糊涂的人物一一刀郎,他的2002年的第1场雪没有做任何宣传,销量就达到270万张,比周杰伦的260万还高。那时候大街小巷,出租车内,卡拉OK厅从潘叔到潘子,潘长江是如何沦为全网笑柄的?大家都说现在的娱乐圈越来越浮躁,明星一个比一个大牌,一点真材实料都没有,格外的怀念以前的娱乐圈。就把上了年纪略有点建树的明星,都会被称作老戏骨或是老艺术家。老戏骨和老艺术家本来是坐娱乐圈揭秘军艺校草沙溢沈腾和杨洋私下关系,勾心斗角太搞笑了说起娱乐圈的男明星颜值,不少人都会想到军艺校草,毕竟三个军艺校草都是正当红的男明星。军艺三大校草沙溢沈腾和杨洋大家应该都不陌生,只是现在沙溢被人调侃凋零了,沈腾则是心宽体胖没有了当张杰做胃镜麻醉手术摘除鱼骨,状况引人担忧,却不见谢娜关心张杰和谢娜结婚多年来了,有了自己的好几个孩子,可以说是娱乐圈的模范夫妻,虽然现在的谢娜也已经生产完毕,但现在恢复状态,所以谢娜什么时候开始复出还没有具体的时间的,但是不管怎么说,即瘦身堪比整容?于正最新照片曝光,穿军装剪寸头,帅到网友认不出8月19日,许久未现身的于正因一则视频引起网友的热议,这是他在某社交平台上分享的近况,换了一个新的发型,并询问网友这个短发你觉得如何?视频中的于正身穿黑色卫衣,搭配灰色休闲裤,脖子林生斌现任晒豪车炫富,称两人想离开杭州,去一个没人认识的地方引子林生斌和现任妻子任真真现在过着什么样的生活?我们认为他们肯定过着生不如死的生活,不能出门不敢发声。其实他们的生活过的比我们想象中好的多,不仅能出门还过着比普通人跟更好的生活。两扫黑风暴天啊,这些女演员竟然都是孙红雷的关系户最近这几天,由孙红雷张艺兴领衔主演的扫黑风暴甭提有多火了!这部剧不仅内容尺度大,而且制作水准也是一流,甚至不输当年的破冰行动和人民的名义。话说扫黑风暴里除了包括孙红雷张艺兴在内的几