码迷,mamicode.com
首页 > 编程语言 > 详细

JVM垃圾回收算法

时间:2021-02-15 12:21:19      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:分析   遇到   不能   copy   compact   jvm   标记   目标   分配   

1.Mark-Sweep算法

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

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

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

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

改进:

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

举一个例子理解清除过程。

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

适用于老年代的GC。

2.Copying算法

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

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

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

JVM垃圾回收算法

标签:分析   遇到   不能   copy   compact   jvm   标记   目标   分配   

原文地址:https://www.cnblogs.com/coder-dai/p/14397732.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!