问题1 JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代
1 判断对象是否可以回收的算法
引用计数法、可达性分析(GCRoots)、复制算法
2 jvm堆结构
image.png
分为新生代和老年代(比例为1:2),新生代分为Eden区和Survivor区,Survivor区分为from区和to区,新生代的Eden和from和to三者比例为8:1:1,当然这些比例是可以通过jvm参数改变的
3 新生代回收
a采用复制回收算法
b当Eden区内存不足,会触发一次Minor GC
4 老年代对象的分配和回收
a.每个对象定义了年龄计数器,经过一次Minor GC后年龄加1,当年龄到达15次后,就会 晋升到老年代,老年代空间不足时就会进行Full GC
b 大对象直接进入老年代,即超过Eden区空间或者一个参数 (XX:PretenureSizeThreshold=30m,无默认值)
5 GC流程总结
对象的正常流程:Eden区->Survior区->老年代
新生代GC:Minor GC;老年代GC:Full GC,比 Minor GC 慢10倍,JVM 会“stop the world”,严重影响性能
网友评论