服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java垃圾回收之标记压缩算法详解

Java垃圾回收之标记压缩算法详解

2021-06-08 15:11Sam哥哥 Java教程

今天小编就为大家分享一篇关于Java垃圾回收之标记压缩算法详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

之前写过的一篇java垃圾回收之标记清除算法详解 ,这个算法有个缺点就是造成内存碎片,存在不连续的空间,这样会导致申请较大空间的时候,又需要进行垃圾回收。下面介绍一下标记压缩算法,可以避免内存碎片。

Java垃圾回收之标记压缩算法详解

空白部分是不连续的。

概述

这个算法的标记清除阶段,跟java垃圾回收之标记清除算法详解  中的是一样的,而对于压缩阶段,它的工作就是移动所有的可达对象到堆内存的同一个区域中,使他们紧凑的排列在一起,从而将所有非可达对象释放出来的空闲内存都集中在一起,通过这样的方式来达到减少内存碎片的目的。如下图:

Java垃圾回收之标记压缩算法详解

压缩算法简单介绍

  • 任意顺序 : 即不考虑原先对象的排列顺序,也不考虑对象之间的引用关系,随意移动对象;
  • 线性顺序 : 考虑对象的引用关系,例如a对象引用了b对象,则尽可能将a和b移动到一块;
  • 滑动顺序 : 按照对象原来在堆中的顺序滑动到堆的一端。

优点

解决内存碎片问题。

缺点

压缩阶段,由于移动了可用对象,需要去更新引用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接

原文链接:https://blog.csdn.net/linsongbin1/article/details/51668525

延伸 · 阅读

精彩推荐