Java垃圾回收之标记压缩算法详解
之前写过的一篇Java垃圾回收之标记清除算法详解 ,这个算法有个缺点就是造成内存碎片,存在不连续的空间,这样会导致申请较大空间的时候,又需要进行垃圾回收。下面介绍一下标记压缩算法,可以避免内存碎片。
空白部分是不连续的。
概述
这个算法的标记清除阶段,跟Java垃圾回收之标记清除算法详解 中的是一样的,而对于压缩阶段,它的工作就是移动所有的可达对象到堆内存的同一个区域中,使他们紧凑的排列在一起,从而将所有非可达对象释放出来的空闲内存都集中在一起,通过这样的方式来达到减少内存碎片的目的。如下图:
压缩算法简单介绍
- 任意顺序 : 即不考虑原先对象的排列顺序,也不考虑对象之间的引用关系,随意移动对象;
- 线性顺序 : 考虑对象的引用关系,例如a对象引用了b对象,则尽可能将a和b移动到一块;
- 滑动顺序 : 按照对象原来在堆中的顺序滑动到堆的一端。
优点
解决内存碎片问题。
缺点
压缩阶段,由于移动了可用对象,需要去更新引用。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
相关文章
Mapstruct @Mapper @Mapping 使用小结
这篇文章主要介绍了Mapstruct @Mapper @Mapping使用小结,他们用于各个对象实体间的相互转换,例如数据库底层实体转为页面对象,Model 转为 DTO, DTO 转为其他中间对象, VO 等等,相关转换代码为编译时自动产生的新文件和代码,需要的朋友可以参考下2023-09-09JDK13.0.1安装与环境变量的配置教程图文详解(Win10平台为例)
这篇文章主要介绍了JDK13.0.1安装与环境变量的配置教程图文详解(Win10平台为例),本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2020-01-01使用ClassFinal实现SpringBoot项目jar包加密的操作指南
在实际开发中,保护项目的安全性和保密性是至关重要的,针对于 Spring Boot 项目,我们需要将 JAR 包进行加密从而有效地防止未经授权的访问和修改,本文将介绍如何使用ClassFinal在 Spring Boot 项目中实现 JAR 包加密,需要的朋友可以参考下2024-06-06
最新评论