堆内存分配
-
java堆分布图
-
分配规则
对象主要分配在新⽣代的 Eden 区上
如果启动了本地线程分配缓冲,将按线程优先在 TLAB 上分配
少数情况下也可能会直接分配在⽼年代中
-
测试代码
-
配置打印垃圾回收
-
控制台打印
-
自定义垃圾收集器
-
控制台打印
-
GC参数指定垃圾回收
-Xms20 M、-Xmx20 M、-Xmn10 M 这3个参数限制了 Java 堆⼤⼩为 20 MB,不可扩展,其中 10 MB 分配给新⽣代,剩下的 10 MB 分配给⽼年代。
-Xx: SurvivorRatio= 8 决定了新⽣代中 Eden 区与两个 Survivor 区的空间⽐例是 8:1
- 新⽣代与⽼年代
新⽣代 GC (Minor GC):指发⽣在新⽣代的垃圾收集动作,因为 Java 对象⼤多都具备朝⽣夕灭的特性,所以 Minor GC ⾮常频繁
⽼年代 GC (Major GC/ Full GC):指发⽣在⽼年代的 GC,出现了 Major GC,经常会伴随⾄少⼀次的 Minor GC(但⾮绝对的,在 Parallel Scavenge 收集器的收集策略⾥就有直接进⾏ Major GC 的策略选择过程)
Major GC 的速度⼀般会⽐ Minor GC 慢 10 倍以上