前言
本文所介绍的是 JDK 1.8 版本,其他版本的 JDK 在这里并不一定正确;内容主要摘自周志明的《深入理解Java虚拟机》一书的关键点,并根据自身的理解进行记录。感兴趣的同学可以去阅读原著。
JVM 的内存结构,主要包括以下 5
个区域:
线程私有: 程序计数器、虚拟机栈、本地方法栈
线程共享: 方法区、堆
程序计数器
上面讲到,程序计数器是线程私有的,它指示的是当前线程所执行的字节码行号,控制跳转、循环,当线程过了 CPU 的时间片,就需要用它记录起来,方便后续恢复“执行现场”,这也是线程私有的原因。该区域是虚拟机规范中唯一
一个不会产生内存溢出(OutOfMemoryError
)的区域。
Java 虚拟机栈
Java 虚拟机栈也是线程私有的,在方法执行时会创建一个栈帧,该栈帧包括了局部变量表
、操作数栈
、动态链接
、方法出口
等信息。可以思考一下,以下方法执行时,对应的是哪一部分?
public boolean method(int methodParam