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

GC的复制算法和标记整理算法

发布网友 发布时间:2023-01-22 19:36

我来回答

1个回答

热心网友 时间:2023-11-03 10:58

复制算法
复制算法是将内存划分为两个区间,在任意时间点,所有动态分配的对象都只能分配在其中的一个区间(称为活动区间),而另外一个区间(空闲区间)是空闲的。
当有效内存空间耗尽时,JVM将暂停程序运行,开启复制GC线程。接下来GC线程会将活动区的存活对象,全部复制到空闲区间,且严格按照内存地址依次排列,与此同时,GC线程将更新存活对象的内存引用地址指向新的内存地址。
此时,空闲区间已经与活动区间交换,而垃圾对象现在已经全部留在了原来的活动区间,也就是现在的空闲区间。事实上,在活动区间转换为空闲区间的同时,垃圾对象已经被一次性全部回收了。

开始时:

在被GC线程处理后:

可以看到,1和4号对象被清楚了,而2,3,5,6号对象则是规则的排列在刚才的空闲区间,也就是现在的活动区间之间,此时左半部分已经变成空闲区间,然而,在下一次GC之后,左半部分再次变成活动区间。
显然:
复制算法缺点时非常明显的:
1.直接浪费了一般的内存。
2.再就是加入对象存活率非常高,达到了极端的100%,那么我们需要将所有的对象都复制一遍,并将所有引用地址重置一遍。复制这一工作所花费的时间,在对象存活率达到一定的程度时,将会变得不可忽视。
由此可见,复制算法要想使用,最起码对象的存活率要非常低才行,而且最重要的是,我们必须要克服50%内存浪费。

标记整理算法

分为两个阶段:
1.标记:遍历GC roots,然后将存活的对象标记。
2.整理:移动所有存活的对象,且按照内存地址次序依次排列,然后将末端内存地址以后的内存全部回收,这个阶段才为整理阶段。

它与GC 前后与复制算法类似,只不过没有了活动区间和空闲区间

倘若此时GC线程开始工作,那么紧接着开始的就是标记阶段了。此阶段与标记/清除算法的标记阶段是一样一样的,我们看标记阶段过后对象的状态,如下图。

接下来,便应该是整理阶段了。我们来看当整理阶段处理完以后,内存的布局是如何的,如下图。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我现在九十斤每天跑半小时可以减肥吗? 一只蛋鸡吃多少饲料 永诚财险水滴重疾2021值得推荐吗?重疾赔付次数有多少? 瑞泰保险水滴瑞选重疾险好不好?值得买吗? 水滴守护真爱重大疾病保障计划值得推荐吗?可靠吗? 去西塘和乌镇 为什么生死狙击花圣总是玩人类 江门豪江华庭带装修吗? 江门豪江华庭售楼中心电话是多少? 这种美图软件叫什么? JVM 技术详解:常见的 GC 算法(Parallel/CMS/G1) 2013年张继科微博有粉丝吗 新的切菜板怎么处理 有时候我也想哭的作文 鼠标在桌面上一直转圈怎么办啊? 分享别人快手订单怎么没有物流信息 梦见和同事达成通奸 梦见亲人通奸 ps中退回快捷键是什么呢,Photoshop中退回快捷键怎么使用的? 1997年属牛巨蟹座性格分析 京东共读怎么看书 京东共读如何看书 《京东阅读》的使用方法介绍 柠檬酸是什么东西 柠檬酸介绍 没有好友辅助怎么找回 梦见自己在挖洞找东西 梦见挖坑找东西 怎么删除花呗记录消费记录 淘宝网上如何设置隐藏帐单 100万二手豪车保险贵吗 龙渊是什么意思 分代GC算法 分代gc回收算法 考卫健委公务员要医学专业吗 九牧晾衣架摇杆怎么拆下来 梦见屋顶白雪是什么意思 建行卡不小心被冻结后有哪些方法可以解冻 支付宝不绑定身份证 银行卡可以转账吗 正品,外贸,原单有什么区别 有谁清楚联通开热点要不要另外收费? 产后塑身衣好还是收腹带好,生完宝宝什么时候可以穿塑身衣 求助,收腹带和塑身衣该选哪种 mastermind这个牌子什么意思 mastermind的英文意思 信用卡上的mastermind是什么意思 termind是什么意思 mastermind VILLA什么意思 微信提现告诉我成功了,可是卡里没钱呀,怎么办 车内能不能放风油精? 车上弄了风油精怎么去掉还不腐蚀车 风油精伤不伤车漆