PC寄存器
- 每一个线程拥有一个PC寄存器
- 在线程创建时创建
- 指向下一条指令的地址
- 执行本地方法时,PC的值为undefined
方法区
- 保存装载的类信息,常量,常量池,即时编译器编译后的代码等数据
- 类的版本
- 字段
- 方法
- 接口
- 通常和永久区关联在一起
- 垃圾回收在方法区的行为
- 异常的定义
JDK6时,String等常量信息置于方法区
JDK7时,已经移到了堆
Java堆
- 和程序开发密切相关
- 应用系统对象都保存在Java堆中
- 所有线程共享Java堆
- 对分代GC来说,堆也是分代的
- GC的主要工作区间
Java栈
基本类型、运算,指向堆内存的指针线程私有,其生命周期和线程相同栈由一系列帧组成帧保存一个方法的局部变量、操作数栈、常量池指针每一次方法调用创建一个帧,并压栈
Java虚拟机栈
虚拟机栈描述的是Java方法执行的动态内存模型
-
栈帧
- 每个方法执行,都会创建一个栈帧,伴随着方法从创建到执行完成。用与存储局部变量表,操作数,动态链接,方法出口等
-
局部变量表
- 存放编译器可知的各种基本数据类型,引用类型,returnAddress类型
大小
StackOverFlow
本地方法栈
- 虚拟机栈为虚拟机执行Java方法服务
- 本地方法栈为虚拟去执行native方法服务
程序计数器
- 是一个非常小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。
- 程序计数器处于线程独占区
- 如果线程执行的是Java方法,则计数器记录的是正在执行的虚拟机字节码指令的地址。如果正在执行的是nativie方法,则这个计数器的指为undefined
- 此区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域
对象的创建
JVM堆内存
-
JDK1.8之后
-
JDK1.8之前