JVM(四) 垃圾收集算法

阅读更多

JVM(四) 垃圾收集算法

 

写前面几章节主要是为后面垃圾回收器优化做铺垫

 

经典的垃圾回收算法以下几种

 

一、标记--清除算法(Mark-Sweep) ( CMS回收器使用的算法 ,FullGc后可以配置内存整理)

图示:

 

回收前状态:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



 

回收后状态:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



 

优缺点:

       算法执行分为两个阶段标记与清除,所有的回收算法,基本都

基于标记回收算法做了深度优化

缺点:效率问题,内存空间碎片(不连续的空间)

 

 

二、复制算法(Copying) (Serial / ParNew / ParallelScavenge / SerialOld / ParallelOld 回收器使用的算法 )

图示:

 

回收前状态:

Eden内存空间 8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Survivor1空间(From空间)1

 

 

 

 

 

 

 

 

 

 

 

 

 

Survivor2空间(To空间) 1

 

 

 

 

 

 

 

 

 

 

 

 

Eden内存空间与Survivor空间 8:1



 

回收后状态:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Survivor1空间(From空间)1

 

 

 

 

 

 

 

 

 

 

 

 

 

Survivor2空间(To空间) 1

 

 

 

 

 

 

 

 

 

 

 

 

Eden内存空间与Survivor空间 8:1



 
JVM(四) 垃圾收集算法_第1张图片
 

优缺点:

         比较标记清除算法,避免了回收造成的内存碎片问题,

缺点:以局部的内存空间牺牲为代价,不过空间的浪费比较小,默认8:1的比例1是浪费的。

复制也有一定的效率与空间成本

 

三、标记整理算法(Mark-Compact) ( G1 回收器使用的算法)

图示:

 

回收前状态:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



 

 

回收后状态:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



 

优缺点:

避免了,空间的浪费,与内存碎片问题。

缺点:整理时复制有效率成本。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • JVM(四) 垃圾收集算法_第2张图片
  • 大小: 1.8 KB
  • JVM(四) 垃圾收集算法_第3张图片
  • 大小: 14 KB
  • 查看图片附件

你可能感兴趣的:(java,jvm,垃圾回收算法)