jvm垃圾回收器

本文详细解析了Java垃圾回收的基本原理,包括回收算法如标记清除、标记整理及复制回收等,介绍了MinorGC和FullGC的触发条件,以及各种垃圾收集器的工作方式,如Serial、ParNew、ParallelScavenge、SerialOld、ParallelOld、CMS和G1收集器的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回收算法

  • 标记清除算法
  • 标记整理算法
  • 复制回收算法

Minor GC

触发

  • 当年轻代满的时候,都会触发Minor GC,这里的年轻代满指的是Eden区,Survivor满不会引发GC。

原理

  • 那么Survivor的作用是啥呢?Suvivor分为From区和To区,我们知道Java堆里的老年代的作用,将长期使用的对象放入老年代。但是中间有个过度,这个就是Survivor区
  • 那为啥要俩个(From区和To区)呢?刚刚新建的对象在Eden中,经历一次Minor GC,Eden中的存活对象就会被移动到第一块survivor space S0,Eden被清空;等Eden区再满了,就再触发一次Minor GC,Eden和S0中的存活对象又会被复制送入第二块survivor space S1(这个过程非常重要,因为这种复制算法保证了S1中来自S0和Eden两部分的存活对象占用连续的内存空间,避免了碎片化的发生
  • Survivor可以晋升老年代,需要From区和To区来回复制的次数而定,这个是可以由虚拟机参数来设定的。

https://juejin.im/post/5b8d2a5551882542ba1ddcf8
垃圾回收收集器介绍 https://crowhawk.github.io/2017/08/15/jvm_3/

Full GC

触发

  • 系统自己执行System.gc()方法
  • 老年代空间不足
  • 方法区空间不足
  • 通过Minor GC后进入老年代的平均大小大于老年代的可用内存
  • 由Eden区、survivor space1(From Space)区向survivor space2(To Space)区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小

垃圾收集器

垃圾收集器可以按新生代和老年代来区分

  • 新生代收集器
收集器收集对象和算法收集器类型
Serial新生代 复制算法单线程
ParNew新生代 复制算法并行的多线程收集器
Parallel Scavenge新生代 复制算法并行的多线程收集器
  • 老年代收集器
收集器收集对象和算法收集器类型
Serial old老年代 标记整理算法单线程
Parallel old老年代 标记整理算法并行的多线程收集器
CMS老年代 标记清除算法并行与并发收集器
G1老年代 跨新生代和老年代;标记整理和化整为0并行与并发收集器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值