JVM GC算法

文章目录

  • JVM GC
      • 是什么:
      • GC分类:
  • GC算法
    • 1、复制算法
      • 复制算法优缺点;
        • 优点
        • 缺点:
      • 使用场景:
    • 2、引用计数法
      • 原理:
      • 优缺点:
        • 优点:
        • 缺点;
    • 3、标记清除算法:
      • 原理:
      • 优缺点:
        • 优点:
        • 缺点;
    • 4、标记压缩算法:
      • 原理:
      • 优缺点;
        • 优点:
        • 缺点:

JVM GC

是什么:

​ GC:Garbage Collection(垃圾回收),是jvm中的一种术语。

GC分类:

		+ 轻GC:当Eden区或者幸存区满的时候就会进行轻GC, 清理新生区
		+ 重GC(Full GC): 当老年区满的时候,就会进行重GC, 清理全局

GC算法

1、复制算法

	### 用堆模型图讲解:

JVM GC算法_第1张图片

1、新生成的对象会先到达Eden区,当Eden区满的时候,就会启动GC, 一部分对象被当成垃圾回收掉内存,另一部分幸存下来,移动至to区, 此时Eden区是空的, from 区可能都有数据 , 如果有就把from区的对象复制到to区清空from区from区和to区对换, 使得永久保持to区是空的。

2、如此运行,假设有一部分对象经历了15次GC依然没有死亡, 那么就会进入养老区。

复制算法优缺点;

优点
  • 因为每一次GC都会把对象移动到一个幸存区中,所以就没有碎片内存
缺点:
  • 因为to区要始终保持空的,这部分内存就不能用于存储,所以浪费了内存

  • 复制需要一定的资源开销。

使用场景:

​ 当对象存活率很低的时候,空间中的对象就会比较少,此时复制算法的缺点就会被缩小,此时使用合适

2、引用计数法

原理:

JVM GC算法_第2张图片

如图,为堆中的每个对象分别添加计数器, 用来标记此对象的引用数量,如对象A有多少个引用,对象B有多少个引用, 对象C的计数器为0,代表没有引用指向这个对象 , 这个就是垃圾,当计数器数值减到0,就会立刻被回收。

优缺点:

优点:

当计数器减到0,就会立刻清理回收

缺点;

程序计数器本身就会占据一定的空间, 而且每一次更新指针,就会对计数器进行加减操作,频繁的操作就会增系统的开销。

3、标记清除算法:

原理:

  • 对堆进行扫描, 标记存活的对象,图中有颜色的即为标记的对象

JVM GC算法_第3张图片

  • 再次扫描堆,清除没有标记的对象,图中虚线对象为被清除的对象

JVM GC算法_第4张图片

  • 清除完毕

优缺点:

优点:

​ 没有浪费额外的内存空间。

缺点;

​ 两次扫描,浪费了大量时间。

​ 产生了碎片内存。

4、标记压缩算法:

原理:

​ 在标记算法的基础上再增加一次扫描,用来压缩空间, 消除碎片内存

JVM GC算法_第5张图片

优缺点;

优点:

​ 消除了内存碎片

缺点:

​ 又增加了一次扫描,加大了时间成本, 同是数据在内存里的压缩移动,也需要消耗一定的资源。

你可能感兴趣的:(JVM,jvm,算法,java)