GC(Garbage Collector)概念
- MinorGC/YGC:年轻代空间耗尽
- MajorGC/FGC:在老年代无法继续分配空间时触发,新生代、老年代同时进行回收。
堆内存逻辑分区(适用分代垃圾收集器)
查看新生代和老年代比例:
命令:java -XX:+PrintFlagsFinal -version | grep NewRatio
uintx NewRatio = 2
新生代:老年代比例为1:2新生代包含Eden区和两个Survivor区
永久代(1.7)Perm Generation
必须指定大小限制
字符串常量1.7存放在永久代元数据区(1.8)Metaspace
可以不设置大小
字符串常量1.8存放在堆
对象的生命周期
- 一个对象生成,首先尝试在栈上分配
- 分配不下,进入Eden区
- 经过一次垃圾回收后,进入S1
- 下次垃圾回收进入S2
- 在S1/S2中反复,直到年龄够了进入Old区
对象何时进入老年代
- 超过XX:MaxTenuringThreshold指定次数(YGC)
1.Parallel Scavenge 15
2.CMS 6
3.G1 15
不重要 - 动态年龄
年龄从小到大进行累加,当加入某个年龄段后,累加和超过survivor区域*TargetSurvivorRatio的时候,就从这个年龄段网上的年龄的对象进行晋升。
年龄1的占用了33%,年龄2的占用了33%,累加和超过默认的TargetSurvivorRatio(50%),年龄2和年龄3的对象都要晋升
作者:xpbob
链接:https://www.jianshu.com/p/989d3b06a49d
- 分配担保
YGC期间,Survivor空间不够了,空间担保直接进入老年代。
JVM内存分配担保机制
【JVM】空间分配担保机制