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

GC过程总结(minor GC 和 Full GC)

发布网友 发布时间:2022-10-12 05:35

我来回答

1个回答

热心网友 时间:2023-10-18 21:12

minor GC整体过程如下:
1,初始阶段,新创建的对象被分配到Eden区,survivor的两块空间都是空的。
2,当Eden区满了的时候,minor GC触发,经过扫描与标记,存活的对象被复制到S0,不存活的对象被回收, 并且存活的对象年龄都增大一岁。
3,在下一次的Minor GC中,Eden区的情况和上面一致,没有引用的对象被回收,存活的对象被复制到survivor区。当Eden 和 s0区空间满了,S0的所有的数据都被复制到S1,需要注意的是,在上次minor GC过程中移动到S0中的两个对象在复制到S1后其年龄要加1。此时Eden区S0区被清空,所有存活的数据都复制到了S1区,并且S1区存在着年龄不一样的对象。
4,再下一次MinorGC则重复这个过程,这一次survivor的两个区对换,存活的对象被复制到S0,存活的对象年龄加1,Eden区和另一个survivor区被清空。
5,再经过几次Minor GC之后,当存活对象的年龄达到一个阈值之后(-XX:MaxTenuringThreshold默认是15),就会被从年轻代Promotion到老年代。
6, 随着MinorGC一次又一次的进行,不断会有新的对象被promote到老年代。
7,上面基本上覆盖了整个年轻代所有的回收过程。最终,MajorGC将会在老年代发生,老年代的空间将会被清除和压缩(标记-清除或者标记整理)。

大部分情况,对象都会首先在 Eden 区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进入 s1(“To”),并且对象的年龄还会加 1(Eden 区->Survivor 区后对象的初始年龄变为 1),当它的年龄增加到一定程度(默认为 15 岁),就会被晋升到老年代中。对象晋升到老年代的年龄阈值,可以通过参数 -XX:MaxTenuringThreshold 来设置。经过这次GC后,Eden区和"From"区已经被清空。这个时候,“From"和"To"会交换他们的角色,也就是新的"To"就是上次GC前的“From”,新的"From"就是上次GC前的"To”。不管怎样,都会保证名为To的Survivor区域是空的。Minor GC会一直重复这样的过程,直到“To”区被填满,"To"区被填满之后,会将所有对象移动到年老代中。

从上面的过程可以看出,Eden区是连续的空间,且Survivor总有一个为空。经过一次GC和复制,一个Survivor中保存着当前还活着的对象,而Eden区和另一个Survivor区的内容都不再需要了,可以直接清空,到下一次GC时,两个Survivor的角色再互换。因此,这种方式分配内存和清理内存的效率都极高,这种垃圾回收的方式就是著名的“停止-复制(Stop-and-copy)”清理法(将Eden区和一个Survivor中仍然存活的对象拷贝到另一个Survivor中),这不代表着停止复制清理法很高效,其实,它也只在这种情况下(基于大部分对象存活周期很短的事实)高效,如果在老年代采用停止复制,则是非常不合适的。

老年代存储的对象比年轻代多得多,而且不乏大对象,对老年代进行内存清理时,如果使用停止-复制算法,则相当低效。一般,老年代用的算法是标记-压缩算法,即:标记出仍然存活的对象(存在引用的),将所有存活的对象向一端移动,以保证内存的连续。在发生Minor GC时,虚拟机会检查每次晋升进入老年代的大小是否大于老年代的剩余空间大小,如果大于,则直接触发一次Full GC,否则,就查看是否设置了-XX:+HandlePromotionFailure(允许担保失败),如果允许,则只会进行MinorGC,此时可以容忍内存分配失败;如果不允许,则仍然进行Full GC(这代表着如果设置-XX:+Handle PromotionFailure,则触发MinorGC就会同时触发Full GC,哪怕老年代还有很多内存,所以,最好不要这样做)。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
修复征信是不是真的? 市面上征信修复公司可靠吗? 征信修复公司是真是假,真的可以修复吗? Emulex FC HBA卡 皮肤毛囊炎怎样治 银行自动扣款什么原因 银行什么情况自动扣款 贷款自动扣款什么意思 粤省事办理准生证需要多久 粤省事办理准生证步骤 为什么于嘉说山猫队和网队的比赛,少了易建联山猫进攻都没那么流畅了... 实施过程中的一些总结 故意遮挡号牌的处罚标准2022 我用火狐浏览器,老是出现 一个弹出窗,说是 需要验证 这个怎么解决? 一打开火狐浏览器地址栏下就提示您需要其他插件以显示此页面所有媒体。点安装缺失插件又什么都没 我用火狐浏览器最近一次更新后downloadhelper就不好用了,合作软件安装不了? 为什么用火狐浏览器时老是提示您需要其他的插件以显示此页面的所有媒体 成都海霸王开市时间 谁能告诉我股票怎么买的,是当天九点半钟开市以后买,然后到晚上就可以看当天收益是吗? excel引用单元格中的文字,模糊查找出现的次数,求大神指点(๑>؂<๑) 冰柜内漏怎么快速找到漏点 消防资质分几个等级 消防资质等级有哪些 如何挑选一款好用的气垫眉粉 区块链12年:应用在了哪些领域? 研究前沿 | 建筑中的区块链:它将如何改变行业 眉笔选什么颜色和眉粉怎么选择。 洗衣机简自洁什么意思 钉钉视频会议中可以播放视频吗 钉钉视频会议中播放视频方法 《海底两万里》是一本奇书,它的作者和是怎样的人 财务管理是否容易考研? 科学家是如何知道天体距离我们有多远呢? 三个宝妈群叫什么名字 早孕孕酮正常值是多少 我姓张,想给女儿取个好写又好听的名字,我女儿是2012年03月25日14点20分出生,希望大家帮帮忙,先谢谢了! 华为魅族的手机怎么样 2021年励志说说 史上最毒心灵鸡汤 感谢生活与经历请继续微笑 电影《无极》以前有人说看不懂,但导演就回应说,你们现在是看不懂,等几年后你们会看懂,到底是讲个什么 陈凯歌导演的《无极》被人成为有一个血案,为什么会这么说? io鼠标怎么用手臂流,求手法,鼠标速度 为什么陈凯歌说5年之内没人能看懂无极?现在有人看懂了吗?我朋友也说五年了也没看出来! 电影 无极 啥意思谁解释下,有通俗一点的解释方法吗,陈凯歌当时说五年之内没人懂,我到现在还没懂 你看完《无极》这个电影有什么感受? 国家征用农村土地补偿标准是什么 室外游泳池在下雨的前、中、后,水质管理应如何进行? 描写松树外貌的段落 英语阅读理解看懂了怎么还总是错很多,怎么办? 酒店装修设计有哪些要点? 能读懂文章,但高考英语阅读老错,这是哪里出现了问题? 高中英语阅读为什么读懂了,答案还是错误的 高三英语,为什么很多英语阅读看懂了答不对? 能读懂文章,但高考英语阅读老错,这是怎么回事?