JVM性能调优-探索堆内存到底是怎么分配

  • 2019 年 12 月 20 日
  • 笔记

简介:堆内存分配⽅式,分配规则讲解
对象分配的规则有哪些
  • 对象主要分配在新⽣代的 Eden 区上
  • 如果启动了本地线程分配缓冲,将按线程优先在 TLAB 上分配
  • 少数情况下也可能会直接分配在⽼年代中
GC参数指定垃圾回收
  • -Xms20 M、-Xmx20 M、-Xmn1 0 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 倍以上。