请教一个关于GC垃圾回收的问题

请教个问题,jvm回收算法中,复制算法相对标记整理算法的优势在哪?感觉整理和复制应该没差别吧,还不需要空闲一块内存出来#学习路径#
全部评论
个人理解哈,就以指针碰撞这种方式为例子吧,复制算法只需要只需要移动尾指针即可,因为To Survivor区头指针是不动的,一个接着一个往下放就行,但是整理算法需要将每块内存碎片的头指针和尾指针同时往前顶,直到出现指针碰撞。 如果存货对象比较多,碎片比较少,整理算法就进行的移动次数不多,所以比较适合老年代吧。但是新生代GC后肯定一堆内存碎片,每一个碎片都往前顶的话代价太高了吧,不如直接复制来的话
2 回复 分享
发布于 2020-05-10 18:41
没有分析源码 不好下定论
点赞 回复 分享
发布于 2020-05-11 11:10
标记回收会留下很多碎片空间,而复制算法不会有碎片空间,因此更利于后面的实例空间分配吧。个人觉得。
点赞 回复 分享
发布于 2020-05-11 09:32
m
点赞 回复 分享
发布于 2020-05-10 23:57
新生代大部分都是“朝生夕死”,进行回收时采用复制算法的话,速度快,这是因为复制的对象少,但是需要额外的空间,复制算法的优点就在于非常简单:直接把活着的复制过去,原来的区域全部clear即可。而采用标记整理算法的话,对于存活对象较少的情况,整体而言比复制算法过程复杂。而且新生代分为Eden,s0,s1回收后是需要将存活的对象放到空闲的一个s区的,所以采用复制算法。
点赞 回复 分享
发布于 2020-05-10 18:26
新生代的对象几乎“朝生夕死”,回收频繁,回收速度快;老年代的空间比新生代要大得多,一旦回收会伴随至少一次Minor GC,就会发生Full GC,用户程序会停顿,时间比新生代的慢上10倍以上
点赞 回复 分享
发布于 2020-05-10 17:54
我还真没见过有对比这两个的。。。个人感觉要对比的话可以从扫描空间来说,一个要扫描全堆?😂
点赞 回复 分享
发布于 2020-05-10 17:42
复制算法一般给新生代用  因为新生代能活下来的不多, 所以内存按8:1:1分配,只需要空闲十份里面的1份。。  标记整理给老年代用, 因为老年代每次死得比较少
点赞 回复 分享
发布于 2020-05-10 17:40
复制算法需要额外空间
点赞 回复 分享
发布于 2020-05-10 17:38

相关推荐

秋招不是要开始了吗,我都打算润了,看大家还在找不敢润了
一条从:因为不是人人都像佬一样有实习像我们这种二本仔秋招没有实习也是白忙活
点赞 评论 收藏
分享
05-19 15:21
已编辑
华南农业大学 Java
白火同学:你才沟通了200,说实话,北上广深杭这里面你连一座城市的互联网公司都没投满呢,更别说还有各种准一线二线城市了。等你沟通突破了三位数,还没结果再考虑转行的事吧。
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务