1.什么是JVM运行时数据区?
JVM运行时数据区分为五个部分:程序计数器,Java虚拟机栈,本地方法栈,堆,方法区。
- 程序计数器:该部分是一个很小的内存空间,线程私有,存放的是该线程字节码运行行号地址。(CPU多核,线程重新获取时间片时则可在这里读取线程运行到哪)
- Java虚拟机栈:该部分是线程私有的,Java方法调用的时候会产生个栈帧存放在这里,栈帧里包括:局部变量表,操作数栈,动态链接,方法出口
- 本地方法栈:跟Java虚拟机栈功能类似,但是该部分是调用native方法时存放的数据区域
- 堆:线程共享,基本上所有对象和数组都是分配在堆上。
- 方法区:线程共享,方法区里存放类的元信息,常量,静态变量,即时编译得到的代码。jdk1.7之前是用永久代实现方法区的,jdk1.8以后用元空间实现方法区,