微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JVM垃圾回收算法

1.Mark-Sweep算法

整个算法分为标记和清除两个部分。

标记阶段采用可达性分析算法。可达性分析算法从GC roots出发,寻找引用的对象,如果对象被遍历到,则标记

清除阶段对目标空间进行遍历,若对象没有被标记过,则清除该对象。时间复杂度为O(n),结果会导致空间中存在大量碎片(零碎空间),当遇到大对象时就不能将这些空间分配给对象,导致浪费。

且各个碎片起始地址分散,再次分配空间时,需要返回一个列表,较为浪费。

改进:

Mark-Sweep-Compact算法
在上述过程进行完之后,将离散的对象压缩到一个连续空间上。就可以实现空间的连续存储。

一个例子理解清除过程。

一个教室里坐着很多人,有些人自习,有些人准备上课。上课了,自习的人自然就被赶出去了(sweep),剩余的人可以选择不移动座位,如果都移动到前排就是compact了。 

适用于老年代的GC。

2.copying算法

此种算法进行时,不必进行标志。从GC roots开始遍历,对每一个遍历到的对象直接按顺序复制到另一个空间即可,复制完毕删除原来的空间。

在上述例子中,这些要上课的人让他们到另一个教室按顺序坐下,原来教室的人也直接走完,清空该区域,这种做法的好处在于少了一次遍历的过程。速度较快。

适用于JVM堆中新生代的GC。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐