内存区域
PC指针
栈
堆
方法区
堆 分为新生代,老年代,
方法区、永久代、Meta空间的说明:
https://www.cnblogs.com/chengpeng15/p/9850690.html
内存回收及内存分配
新生代 采用复制算法进行垃圾回收 Minor GC 速度快
扫描二维码关注公众号,回复:
11785878 查看本文章
老年代 采用标记整理(清理)进行垃圾回收 Major/Full GC 速度可能是 Minor GC 的10倍
对象内存分配
对象优先考虑在Eden 区域分配内存,Eden空间不足时促发一次Minor GC,为新对象腾出空间,GC过程中对象可能被移到Survivor区,如果Survivor无法容纳,则移到老年代。
-XX:PretenureSizeThreshold 参数,大于这个设置值的对象直接在老年代分配。
-XX:MaxTenuringThreshold参数,晋升老年代年龄阈值,每一次Minor GC,Survivor中的对象年龄加1.超过阈值后移到老年代。
除了超年龄晋升,JVM也有其它策略来让对象晋升到老年代:某年龄的对象的总大小大于Survivor/2 的大小时,大于等于这个年龄的对象全部晋升。
FULL GC触发的一个时机:
Minnor GC 前,JVM 检测老年代是否有空间容纳新生代的所有对象,如果没有,那么就可能触发一次FULL GC,在老年代腾出空间来容纳Minor GC 可能代来的 晋升行为。是否FULL GC有若干的判断条件。