这是我阅读JVM说明书的笔记。我画了一张图来帮助我更好地理解。
1. 每个独立线程(非共享)的数据区域
每个独立线程的数据区域包括程序计数寄存器(program counter register)、JVM栈(JVM Stack)和Native方法栈(Native Method Stack)。当创建一个新的线程时,这些数据区也同时被创建。
程序计数寄存器:用于控制线程的每一次执行
JVM栈:用于存放帧(frame),如下图所示
Native方法栈:用于支持native方法,即非Java语言的方法
2. 所有线程共享的数据区域
所有线程共享堆(Heap)和方法区(Method Area)。
堆:这是我们经常遇到的数据区。它存放着数组和对象的,当JVM启动时就会创建堆。垃圾回收器就在该区域工作。
方法区:存放run-time的常量池(constant pool)、字段和方法的数据,以及方法和构造函数的代码。
运行时常量池:它是类或接口文件中常量池表在运行时的表示。它包含多种类型的常量,包括编译时方法类能确定的数值常量,以及运行时才能确定的引用字段。
栈存放帧,每调用一个方法时,就有一个帧入栈。每个帧包含一个本地变量数组、操作数栈(Operand Stack)、常量池的引用。
如需更多信息,请前往JVM说明网站。
参考文章:
2. Java字节码基础
相关文章:
1. JVM运行时是什么样子?