1. 程序计数器
线程私有,是一个记录着当前线程所执行的字节码的行号指示器
2. Java虚拟机栈
线程私有,每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
3. 本地方法栈
与虚拟机栈类似,只不过是执行的是非Java代码
4. 堆
Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。
堆里还包含一个常量池,保存字面量和符号引用量。
5. 方法区
线程共享,保存代码数据,编译好的.class文件,常量,静态变量等
1.8之前的实现叫永久代
1.8之后的实现在直接内存中,叫元空间