Vit*_*liy 7 java garbage-collection
我已经阅读了大量有关Java SE 6和7的HotSpot GC的文档.在谈到获得自由记忆的连续区域的策略时,提出了两种"竞争"方法:疏散方法(通常应用于年轻一代) ),将活动对象从"从"复制到空'到'和压缩(CMS的后退),其中活动对象移动到碎片区域内的一侧,形成一个连续的未使用块记忆.
两种方法都与"实时集"的大小成比例.不同之处在于疏散需要x2倍的空间,而实际集合则不需要压缩.
为什么我们需要撤离技术呢?需要完成的复制量是相同的,但是它需要保留更多的堆大小,并且不允许更快地重新映射引用.
是的:疏散可以并行执行(其中 - 压缩不能,或者至少不那么容易),但这个特性从未被提及过,并且看起来并不那么重要(考虑到重新映射比移动要昂贵得多).
一个大问题是,“疏散”时,腾出的空间实际上是空的,而“压缩”时,一些其他对象 Y 可能会移动到对象 X 所在的空间中。这使得更正指针变得更加困难,因为不能简单地使用指针指向无效位置这一事实来提示需要更新的代码。并且不能将“转发指针”存储在“无效”位置。
这使得 GC 的并发性大大降低——应用程序必须在更长的时间内处于“GC 冻结”状态。
| 归档时间: |
|
| 查看次数: |
413 次 |
| 最近记录: |