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

前端之家收集整理的这篇文章主要介绍了java – 垃圾收集中疏散和压缩之间的根本区别是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经阅读了大量关于 Java SE 6和7的HotSpot GC的文档.在谈到获得自由记忆的连续区域的策略时,提出了两种“竞争”方法:疏散方法(通常应用于年轻人) ),活动对象从’从’复制到空’到’和压缩(CMS的后退),其中活动对象移动到碎片区域内的一侧,形成一个连续的未使用的块记忆.

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

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

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

解决方法

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

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

猜你在找的Java相关文章