JVM运行时数据区指的时当JVM运行时会出现哪些区域,侧重于了解各个区域创建的时机;JVM内存区域划分是指JVM内存分为哪些区域,侧重于各个区域的作用,是同一块内容从两个角度进行看待。图1和图2分别为JVM运行时数据区和JVM内存区域划分的实例图。
1.方法区
存储了类结构信息,例如字段方法数据、构造函数和普通方法字节码内容还有运行时常量区,随着JVM的创建和停止而开始和结束。
2.堆区
类实例和数组实例分配的区域,随着JVM的创建和停止而开始和结束。
3.JAVA栈
栈由栈帧组成,每个调用一个方法都会创建一个栈帧,栈帧中有局部变量表、操作数栈和动态链接。java使用局部变量完成方法调用时参数的传递;操作数栈用来存储计算时局部变量表、对象实例的常亮和变量值,准备调用方法的参数和接受方法返回值;动态链接指向。JAVA栈随着单个线程创建和停止而开始和结束。
4.本地方法栈
和java栈功能差不多,当加载的类需要调用java以外其他语言编写的方法时,会创建本地方法栈。
5.PC计数器
程序计数器的作用是记住下一条要执行JVM指令位置,指向要执行字节码的行号,交给解释器,解释器翻译成机器码交给CPU执行。,由于程序计数器中存储的数据所占空间的大小不会随程序的执行而发生改变,因此,对于程序计数器是不会发生内存溢出现象(OutOfMemory)的。
Reference
[1] https://baijiahao.baidu.com/s?id=1634019520492892385&wfr=spider&for=pc .
[2] https://www.cnblogs.com/javastack/p/13391983.html
[3] lhttps://blog.csdn.net/qq_28497823/article/details/104968151.
[4](美)林德霍尔姆等著.Java虚拟机规范 Java SE 第7版[M].北京:机械工业出版社.2014.