JVM学习笔记七--堆

文章目录

  • 一、堆的核心概述
  • 二、设置堆内存大小与OOM
  • 三、年轻代与老年代
  • 四、图解对象分配过程
  • 五、Minor GC、Major GC、Full GC
  • 六、堆空间分代思想
  • 七、内存分配策略
  • 八、为对象分配内存:TLAB
  • 九、小结堆空间的参数设置
  • 十、堆是分配对象的唯一选择吗?


一、堆的核心概述

JVM学习笔记七--堆_第1张图片
JVM学习笔记七--堆_第2张图片
JVM学习笔记七--堆_第3张图片
JVM学习笔记七--堆_第4张图片
JVM学习笔记七--堆_第5张图片
JVM学习笔记七--堆_第6张图片

二、设置堆内存大小与OOM

JVM学习笔记七--堆_第7张图片

  1. 开发中建议将初始堆内存和最大的堆内存设置为相同的值
  2. 查看设置的参数:
    方式一:jps / jstat -gc 进程id
    方式二:-XX:PrintGCDetails

jps指令是jdk中bin目录下的一个指令,作用是查看当前程序运行的进程
jstat指令是用来查看jvm在GC的时候的统计信息,现实想看的进程的内存使用情况
在这里插入图片描述
JVM学习笔记七--堆_第8张图片
JVM学习笔记七--堆_第9张图片

三、年轻代与老年代

JVM学习笔记七--堆_第10张图片
JVM学习笔记七--堆_第11张图片

jinfo -flag NewRatio 进程id //查看新生代和老年代的比例

在这里插入图片描述
JVM学习笔记七--堆_第12张图片
JVM学习笔记七--堆_第13张图片

四、图解对象分配过程

JVM学习笔记七--堆_第14张图片
JVM学习笔记七--堆_第15张图片
当伊甸园区满的时候,会触发垃圾回收器:YGC/Minor GC
注意:幸存者区满的时候不会触发YGC,但不代表不会回收,当伊甸园区满的时候触发了YGC,此时若幸存者区存在对象不再被引用,这时也会回收该区的垃圾对象。

JVM学习笔记七--堆_第16张图片
JVM学习笔记七--堆_第17张图片
JVM学习笔记七--堆_第18张图片

五、Minor GC、Major GC、Full GC

JVM学习笔记七--堆_第19张图片
JVM学习笔记七--堆_第20张图片
JVM学习笔记七--堆_第21张图片
JVM学习笔记七--堆_第22张图片
JVM学习笔记七--堆_第23张图片

六、堆空间分代思想

JVM学习笔记七--堆_第24张图片
JVM学习笔记七--堆_第25张图片

七、内存分配策略

JVM学习笔记七--堆_第26张图片
JVM学习笔记七--堆_第27张图片

八、为对象分配内存:TLAB

JVM学习笔记七--堆_第28张图片
JVM学习笔记七--堆_第29张图片
JVM学习笔记七--堆_第30张图片
JVM学习笔记七--堆_第31张图片
JVM学习笔记七--堆_第32张图片

九、小结堆空间的参数设置

JVM学习笔记七--堆_第33张图片
JVM学习笔记七--堆_第34张图片
JVM学习笔记七--堆_第35张图片

十、堆是分配对象的唯一选择吗?

JVM学习笔记七--堆_第36张图片
JVM学习笔记七--堆_第37张图片
JVM学习笔记七--堆_第38张图片
JVM学习笔记七--堆_第39张图片
JVM学习笔记七--堆_第40张图片
JVM学习笔记七--堆_第41张图片
结论:开发中能使用局部变量的,就不要使用在方法外定义。
JVM学习笔记七--堆_第42张图片
JVM学习笔记七--堆_第43张图片
JVM学习笔记七--堆_第44张图片
JVM学习笔记七--堆_第45张图片
JVM学习笔记七--堆_第46张图片
JVM学习笔记七--堆_第47张图片
JVM学习笔记七--堆_第48张图片
JVM学习笔记七--堆_第49张图片

JVM学习笔记七--堆_第50张图片

你可能感兴趣的:(JVM,jvm,java,堆栈,面试)