Minor GC、Major GC、Full GC

Minor GC :只是新生代的垃圾收集

  1. new的对象先放Eden区。此区有大小限制,Eden区就是伊甸园区,因为圣经中说了,亚当先被上帝创造出来之后,怕他孤单,把亚当的肋骨抽出来一根创造出来了夏娃,亚当和夏娃被丢进了伊甸园,所以这里的Eden就是说new的对象最先放的地方。
  2. 当伊甸园的空间填满时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(Minor GC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。再加载新的对象放到伊甸园区
  3. 然后将伊甸园中的剩余对象移动到幸存者0区。
  4. 如果再次触发垃圾回收,此时上次幸存下来的放到幸存者0区的,如果没有回收,就会放到幸存者1区。
  5. 如果再次经历垃圾回收,此时会重新放回幸存者0区,接着再去幸存者1区。
  6. 啥时候能去养老区呢?可以设置次数。默认是15次。·可以设置参数:-XX:MaxTenuringThreshold=进行设置。
  7. 在养老区,相对悠闲。当老年区内存不足时,再次触发GC:Major GC,进行养老区的内存清理。
  8. 若养老区执行了Major GC之后发现依然无法进行对象的保存,就会产生OOM异常。

总结
==针对幸存者s0,s1区:复制之后有交换,谁空谁是to==
==关于垃圾回收:频繁在新生区收集,很少在养老区收集,几乎不再永久区/元空间收集。==

 

Major GC:只是老年代的垃圾收集

  • 指发生在老年代的GC,对象从老年代消失时,Major GC 或者 Full GC 发生了
  • 出现了Major GC,经常会伴随至少一次的Minor GC(不是绝对的,在Parallel Scavenge 收集器的收集策略里就有直接进行Major GC的策略选择过程)
    • 也就是老年代空间不足时,会先尝试触发Minor GC。如果之后空间还不足,则触发Major GC
  • Major GC速度一般会比Minor GC慢10倍以上,STW时间更长
  • 如果Major GC后,内存还不足,就报OOM了


 

Full GC:收集整个java堆和方法区的垃圾收集

    • ①调用System.gc()时,系统建议执行Full GC,但是不必然执行
    • ②老年代空间不足
    • ③方法区空间不足
    • ④通过Minor GC后进入老年代的平均大小小于老年代的可用内存
    • ⑤由Eden区,Survivor S0(from)区向S1(to)区复制时,对象大小由于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小
  • 说明:Full GC 是开发或调优中尽量要避免的,这样暂停时间会短一些


 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值