加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 垃圾收集中疏散和压缩之间的根本区别是什么?

发布时间:2020-12-15 00:39:52 所属栏目:Java 来源:网络整理
导读:我已经阅读了大量关于 Java SE 6和7的HotSpot GC的文档.在谈到获得自由记忆的连续区域的策略时,提出了两种“竞争”方法:疏散方法(通常应用于年轻人) ),活动对象从’从’复制到空’到’和压缩(CMS的后退),其中活动对象移动到碎片区域内的一侧,形成一个连续的
我已经阅读了大量关于 Java SE 6和7的HotSpot GC的文档.在谈到获得自由记忆的连续区域的策略时,提出了两种“竞争”方法:疏散方法(通常应用于年轻人) ),活动对象从’从’复制到空’到’和压缩(CMS的后退),其中活动对象移动到碎片区域内的一侧,形成一个连续的未使用的块记忆.

两种方法都与“实时集”的大小成比例.不同之处在于疏散需要x2倍的空间,而实际集合则不需要压缩.

为什么我们需要撤离技术呢?需要完成的复制量是相同的,但是它需要保留更多的堆大小,并且不允许更快地重新映射引用.

是的:疏散可以并行执行(其中 – 压缩不能,或者至少不那么容易),但这种特性从未被提及过,并且看起来并不那么重要(考虑到重新映射比移动要昂贵得多).

解决方法

一个大的问题是,在“疏散”时,腾出的空间确实是空的,而在“压实”时,一些其他物体Y可能被移动到物体X所在的空间中.这使得纠正指针变得更加困难,因为人们不能简单地使用指针指向无效位置的事实来提示需要更新的代码.并且不能将“转发指针”存储在“无效”位置.

这使得GC更少并发 – 应用程序必须处于“GC冻结”较长时间.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读