Java中更优秀些的标记整理算法

简介: Java中更优秀些的标记整理算法

标记-整理算法(亦或称之为“标记-压缩算法”)

基于标记-清除算法优化

概念介绍

标记过程仍然与“标记-清除”算法一样, 但后续步骤不是直接对可回收对象进行清理, 而是让所有存活的对象都向内存空间一端移动, 然后直接清理掉边界以外的内存。

标记-清除算法与标记-整理算法的本质差异在于前者是一种非移动式的回收算法, 而后者是移动式的。 是否移动回收后的存活对象是一项优缺点并存的风险决策:

具体逻辑实现

如果移动存活对象 尤其是在老年代这种每次回收都有大量对象存活区域, 移动存活对象并更新所有引用这些对象的地方将会是一种极为负重的操作, 而且这种对象移动操作必须全程暂停用户应用程序才能进行。

这就更加让使用者不得不小心翼翼地权衡其弊端了, 像这样的停顿被最初的虚拟机设计者形象地描述为“Stop The World”。

如果完全不考虑移动和整理存活对象,弥散于堆中的存活对象导致的空间碎片化问题就只能依赖更为复杂的内存分配器和内存访问器来解决。

另外, 还有一种“和稀泥式”解决方案可以不在内存分配和访问上增加太大额外负担。

做法是让虚拟机平时多数时间都采用标记-清除算法, 暂时容忍内存碎片的存在, 直到内存空间的碎片化程度已经大到影响对象分配时, 再采用标记-整理算法收集一次, 以获得规整的内存空间。

前面提到的基于标记-清除算法的CMS收集器面临空间碎片过多时采用的就是这种处理办法。

目录
相关文章
|
8天前
|
算法 安全 Java
Java多线程基础-12:详解CAS算法
CAS(Compare and Swap)算法是一种无锁同步原语,用于在多线程环境中更新内存位置的值。
18 0
|
2天前
|
搜索推荐 算法 Java
【Java基础】 几种简单的算法排序
几种简单的JAVA算法排序
20 4
|
4天前
|
搜索推荐 算法 Java
JAVA中的交换类排序算法详解
JAVA中的交换类排序算法详解
10 1
|
4天前
|
搜索推荐 算法 Java
JAVA中的排序算法详解与实战
JAVA中的排序算法详解与实战
6 1
|
4天前
|
算法 Java
JAVA中实现最短距离算法——Dijkstra算法详解
JAVA中实现最短距离算法——Dijkstra算法详解
9 1
|
4天前
|
算法 Java
JAVA中的递推算法及其应用
JAVA中的递推算法及其应用
9 1
|
12天前
|
算法 搜索推荐 Java
Java数据结构 -- 常见算法分析(查找算法、排序算法)精解详解!!!
Java数据结构 -- 常见算法分析(查找算法、排序算法)精解详解!!!
7 0
|
15天前
|
算法 Java
Java中CAS算法的集中体现:Atomic原子类库,你了解吗?
【5月更文挑战第15天】Java中CAS算法的集中体现:Atomic原子类库,你了解吗?
30 1
|
18天前
|
算法 搜索推荐 Java
滚雪球学Java(33):数组算法大揭秘:应用案例实战分享
【5月更文挑战第8天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
43 8
滚雪球学Java(33):数组算法大揭秘:应用案例实战分享
|
19天前
|
缓存 算法 Java
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析