JVM内存区域:
线程共享:堆和⽅法区 (JDK1.8之后改为元空间),
线程私有:程序计数器、虚拟机栈、本地⽅法栈
JDK1.6:
JDK1.8:
程序计数器的作⽤:
- 通过改变程序计数器来依次读取指令,从⽽实现代码的流程控制
- 记录当前线程执⾏的位置,多线程情况下,线程切换后能恢复到正确的位置(这个也是线程私有的原因)
虚拟机栈:
每个 Java ⽅法执⾏时会创建⼀个栈帧⽤于存储局部变量表、操作数栈、动态链接等。从⽅法调⽤到执⾏完成的过程,对应着⼀个栈帧在 Java 虚拟机栈中的⼊栈
和出栈。
本地⽅法栈:
和虚拟机栈类似,区别是:虚拟机栈为Java ⽅法(即字节码)服务,⽽本地⽅法栈则为Native ⽅法服务,也会创建栈帧,存放本地⽅法的局部变量表、操作数栈、动态链接等。
为了保证线程中的局部变量不被其它线程访问到,所以虚拟机栈和本地⽅法栈是线程私有的。
堆:存放创建的对象
Java 堆也叫GC堆,是垃圾收集器的主要管理区域。
⽅法区:也称永久代
存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等。