JVM——Minor GC、Major GC和Full GC之间的区别

本文详细解析了JVM中的MinorGC与MajorGC(FullGC)的区别与联系,阐述了不同GC的触发机制,以及如何区分年轻代和老年代的垃圾回收过程。适合对JVM内存管理有兴趣的读者。

1.Minor GC

我们知道,新生代可以分为Eden和Survivor区域,而从新生代代空间(包括 Eden 和 Survivor 区域)回收内存则被称为 Minor GC。可以参考JVM——四种垃圾收集算法详解中的标记复制算法。

2.Major GC vs Full GC

  • Major GC 是清理老年代。但是由于很多MojorGC 是由MinorGC 触发的,所以有时候很难将MajorGC 和MinorGC区分开。出现了 Major GC,经常会伴随至少一次的 Minor GC(但非绝对的,ParallelScavenge 收集器的收集策略里就有直接进行 Major GC 的策略选择过程) 。MajorGC 的速度一般会比 Minor GC 慢 10倍以上。
  • Full GC 是清理整个堆空间—包括年轻代和老年代。

3.触发机制

Minor GC触发机制: 当年轻代满时就会触发Minor GC,这里的年轻代满指的是Eden代满,Survivor满不会引发GC。 
Full GC触发机制: 

  • 调用System.gc时,系统建议执行Full GC(但是不必然执行 )
  • 老年代空间不足 
  • 方法区空间不足 
  • 通过Minor GC后进入老年代的平均大小大于老年代的可用内存 
  • 由Eden区、survivor space1(From Space)区向survivor space2(To Space)区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小
  • 当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载。 
     

其实Full GC定义是相对明确的,就是针对整个新生代、老生代、元空间(metaspace,java8以上版本取代perm gen)的全局范围的GC;Minor GC和Major GC是俗称,在Hotspot JVM实现的Serial GC, Parallel GC, CMS, G1 GC中大致可以对应到某个Young GC和Old GC算法组合;
因此,简单的说,GC的触发条件就是某GC算法对应区域满了,或是预测快满了。比如,上文说到的,各种Young GC的触发原因都是eden区满了。

 

好啦,以上就是关于几种GC的相关知识总结啦,如果大家有什么不明白的地方或者发现文中有描述不好的地方,欢迎大家留言评论,我们一起学习呀。

 

Biu~~~~~~~~~~~~~~~~~~~~宫å´éªé¾ç«è¡¨æå|é¾ç«gifå¾è¡¨æåä¸è½½å¾ç~~~~~~~~~~~~~~~~~~~~~~pia!

### 回答1: minor gc full gc 是 Java 虚拟机中的两种垃圾回收方式。 minor gc 是指对年轻代进行垃圾回收,年轻代中的对象一般存活时间较短,因此垃圾回收频率较高。minor gc 通常会暂停应用程序的执行,直到垃圾回收完成。 full gc 是指对整个堆进行垃圾回收,包括年轻代老年代。老年代中的对象一般存活时间较长,因此垃圾回收频率较低。full gc 会暂停应用程序的执行,直到垃圾回收完成,因此会对应用程序的性能产生较大影响。 因此,minor gc full gc区别在于垃圾回收的范围频率,以及对应用程序性能的影响程度。 ### 回答2: Minor GC(Young GCFull GCMajor GC)是Java虚拟机(JVM)中垃圾收集的两个重要阶段。 Minor GC主要负责清理年轻代(Young Generation)的垃圾对象,年轻代又分为Eden区、Survivor 0区Survivor 1区。当Eden区满时,触发Minor GC。在这个过程中,存活的对象会被复制到Survivor区,然后进行垃圾回收。Minor GC是一个短暂的过程,通常不会引起长时间的应用暂停。因为大部分对象在年轻代很快就被回收,所以Minor GC的频率比较高。 Full GC则是对整个堆内存进行垃圾回收。它主要清理老年代(Old Generation)永久代(Perm Generation)中的垃圾对象。Old Generation存放生命周期较长的对象,而Perm Generation存放类信息、常量等。Full GC的频率较低,一般在触发条件满足时才会发生。Full GC执行时间较长,会导致应用的停顿,并且会造成较大开销。 总结而言,Minor GC主要针对年轻代的回收,频率较高但耗时较短,而Full GC则是对整个堆内存进行垃圾回收,频率较低但耗时较长。Minor GC的目标是快速地回收生命周期短的对象,而Full GC则是为了清理老年代永久代中的垃圾对象以防止内存不足。了解Minor GCFull GC区别有助于我们优化JVM的垃圾回收策略,提高应用的性能稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值