JVM 内存结构

  1. 每个线程只能访问自己的线程栈
  2. 所有引用类型的java对像,都会存储在堆内存中
  3. 堆内存加线程栈->堆栈
  4. 方法中使用的原生数据类型和对象引用地址在栈上存储;
  5. 对象、对象成员与类定义、静态变量在堆上
  6. 堆内存又称为”共享堆”;堆中的所有对象,可以被所有线程访问,只要他们能拿到对象的引用地址

jvm内存结构

JVM 内存整体结构

jvm内存整体架构

JVM 堆内存结构

  1. S0和S1在任意时刻,一个是空的
  2. 类的元数据,常量池常量,方法区,jit
  3. java8将堆中的持久代换名字为Metaspace(元数据)
    JVM 堆内存结构

JMM

img.png

JVM启动参数

查询命令
jps -v
jps -m


启动命令
java [options] classname [args]
java [options] -jar filename [args]
启动参数

  • -开头:标准参数,向后兼容
  • -D开头:设置系统属性
  • -X开头:非标准参数,不保证向后兼容,通过java -X 查看
  • -XX开头:非稳定参数,专门用于控制JVM的行为
    • -XX:+-Flags形式,是对布尔值进行开关
    • -XX:key=value形式,指定某个选项的值

分类

  1. 系统属性参数
    img.png
  2. 运行模式参数
    img.png
  3. 堆内存设置参数
    img.png -Xmx:整个内存的60%-80%
  4. GC设置参数
    img.png java8 默认的GC是:串行gc –XX:+UseParallelGC
  5. 分析诊断参数
    img.png
  6. JavaAgent参数
    img.png

自画jvm图

img.png