学习这部分,有图胜千字
JVM Runtime Area
运行时数据区。JVM在执行Java程序过程中会把它所管理的内存划分为若干个不同的数据区域。
大家都用这张图:
- 程序计数器:(program counter register)。一块很小内存空间,可看做是当前线程所执行的字节码的行号指示器。线程私有,每个线程的PC记录了当前线程要执行的指令。若当前线程执行的是Java方法,其PC值记录的是正在执行的虚拟机字节码指令的地址;若执行的是本地方法(native method),则PC为空(Undefined)。唯一一个没有规定任何OutOfMemoryError的区域。
- Java虚拟机栈(VM Stack):线程私有,与线程生命周期相同。描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。对应2个异常:StackOverflowError。和OutOfMemoryError.
- 本地方法栈