• 组成:
      • 3大部分:
        • 类装载子系统
        • 字节码执行引擎
        • 运行时数据区(内存模型)
    • java代码执行流程:
      • javac 编译成字节码文件
      • 类装载子系统(类加载器) 加载到运行时数据区
      • 字节码执行引擎执行代码
    • 运行时数据区(内存模型)组成:
      • 栈(虚拟机栈):每个线程工作都会分配一个栈内存
      • 本地方法栈
      • 程序计数器
      • 方法区(元空间)
      • 其中:栈 , 本地方法栈,和程序计数器是线程私有的; 堆和方法区是线程共享的:
      • 如下图

    image.png

    • 栈的组成:
      • 栈帧:每一个方法执行都会在栈给他分配一个内存,这就是栈帧内存
        • 局部变量表
        • 操作数栈(存放要操作的数据的地方)
        • 动态链接(可以理解为存放方法数据地址的地方:代码执行的时候可以从这找到地址)
        • 方法出口
      • 一个基本数据类型赋值过程:将基本数据 压入操作数栈, 然后再赋值给局部变量
    • 方法区:jdk8之前叫永久代
      • 存放常量
      • 静态变量
      • 类信息
    • 堆:
      • 年轻代(1/3)
        • eden :新创建的对象都在这里
        • survival 1区
        • survival 2区
      • 老年代(2/3)