标签:分析 遇到 不能 copy compact jvm 标记 目标 分配
1.Mark-Sweep算法
整个算法分为标记和清除两个部分。
标记阶段采用可达性分析算法。可达性分析算法从GC roots出发,寻找引用的对象,如果对象被遍历到,则标记。
清除阶段对目标空间进行遍历,若对象没有被标记过,则清除该对象。时间复杂度为O(n),结果会导致空间中存在大量碎片(零碎空间),当遇到大对象时就不能将这些空间分配给对象,导致浪费。
且各个碎片起始地址分散,再次分配空间时,需要返回一个列表,较为浪费。
改进:
Mark-Sweep-Compact算法
在上述过程进行完之后,将离散的对象压缩到一个连续空间上。就可以实现空间的连续存储。
举一个例子理解清除过程。
一个教室里坐着很多人,有些人自习,有些人准备上课。上课了,自习的人自然就被赶出去了(sweep),剩余的人可以选择不移动座位,如果都移动到前排就是compact了。
适用于老年代的GC。
2.Copying算法
此种算法进行时,不必进行标志。从GC roots开始遍历,对每一个遍历到的对象直接按顺序复制到另一个空间即可,复制完毕删除原来的空间。
在上述例子中,这些要上课的人让他们到另一个教室按顺序坐下,原来教室的人也直接走完,清空该区域,这种做法的好处在于少了一次遍历的过程。速度较快。
适用于JVM堆中新生代的GC。
标签:分析 遇到 不能 copy compact jvm 标记 目标 分配
原文地址:https://www.cnblogs.com/coder-dai/p/14397732.html