展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

堆内存分配

  • 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 倍以上
posted @ 2022-09-15 16:58  DogLeftover  阅读(23)  评论(0编辑  收藏  举报