JVM-GC种类及触发机制

具体JAVA_OPTS参数详解:

-Xms2000m -Xmx2000m -Xmn800m -XX:PermSize=64m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=15

Xms表示jvm启动时的初始堆大小,Xmx为最大堆大小,Xmn为新生代的大小

PermSize为永久带的初始大小,MaxPermSize为永久代的最大空间

MaxTenuringThreshold为达到这个值,对象就会被移进老年代

GC种类:

1、老年代中采用标记-清除算法的Full GC(或称为Major GC)

2、新生代中采用复制算法的Minor GC

新生代是GC收集垃圾的频繁区域,默认对象在survivor中每熬过15次(可配置)Minor GC时,就会被晋升到老年代中。

Full GC发生的次数不会有Minor GC那么频繁,并且做一次Full GC要比进行一次Minor GC耗时更长。

在程序中,每次调用System.gc(),是先进行Minor GC,然后再进行Full GC

新生代--新创建的对象

老年代--经过多次Minor GC和Full GC回收,而没有被回收的对象或者大对象

永久代--jvm加载的类文件信息,常量,静态变量等。

触发Full gc条件:

1.调用System.gc

2.老年代空间不足

3.永久代空间不足

4. gc 担保失败

参考资料:https://blog.csdn.net/scugxl/article/details/50935863

总结一下jvm采用分代垃圾回收方式的原因:

1.Java程序在运行的时候,大多数对象在创建后很快就没有对象使用它了。

2.大多数一直在被使用的对象很少再去引用新创建的对象。

发布了166 篇原创文章 · 获赞 60 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/chen978616649/article/details/99835389