1.JVM简化架构

2.运行时数据区
包括:PC寄存器、Java虚拟机栈、Java堆、方法区、运行时常量池、本地方法栈等
2.1 PC寄存器
- 每个线程都有一个PC寄存器,是线程私有的,用来存储指向下一条指令的地址
- 在创建线程的时候,创建对应的PC寄存器
- 执行本地方法时,PC寄存器的值为undefined
- 是一块较小的内存空间,是唯一一个在JVM规范中没有规定OutOfMemoryError的内存空间
2.2 Java栈
- 栈由一系列桢(Frame)组成,是线程私有的
- 桢用来保存一个方法的局部变量、操作数栈(参数传递使用操作数栈)、常量池指针、动态链接、方法返回值等
- 每一次方法调用创建一个桢,并压栈,退出方法的时候,修改栈顶指针就可以把栈桢中的内容销毁
- 局部变量表存放了编译期可知的各种数据基本类型和引用类型,每个solt存放32位的数据,long、double占两个槽位
2.3 Java堆
- 存放应用系统创建的对象和数组,所以线程共享Java堆
- 运行期间动态f分配内存大小,自动进行垃圾回收;相对效率较慢
2.4 方法区
- 方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载类的结构信息、常量、静态变量、即时编译器编译后的代码缓存等数据
- 它却有一个别名叫作“非堆”(Non-Heap),目的是与Java堆区 分开来。
2.4 运行时常量池
- 运行时常量池(Runtime Constant Pool)是方法区的一部分
- Class文件中除了有类的版本、字 段、方法、接口等描述信息外,还有一项信息是常量池表(Constant Pool Table),用于存放编译期生 成的各种字面量与符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。
2.5 本地方法栈
- 本地方法栈(Native M ethod Stacks)与虚拟机栈所发挥的作用是非常相似的,其区别只是虚拟机 栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的本地(Native) 方法服务。
2.6 栈、堆、方法区交互关系

