JVM · Java虚拟机原理 · JVM上语言·框架· 生态系统

JAVA虚拟机之运行时数据区域

2018-12-19  本文已影响12人  阿狸404

运行时数据区域

运行时数据区域主要分为:堆,栈,方法区,程序计数器。实际上,我们所说的栈又分为:java虚拟机栈,本地方法栈。

1. 程序计数器
2.java虚拟机栈
    ​

    其中:

    ​ **frame**表示栈帧。随着方法的调用而入栈,调用结束或者返回异常而出栈。

    ​ **local variables**表示局部变量表,是一个具有物理地址连续的内存空间,最小单位是Slot。用来存放方法参数和方法内部定义的局部变量。虚拟机没有明确指明一个Slot的内存空间大小。但是boolean、byte、char、short、int、float、reference、returnAddress类型的数据都可以用32位空间或更小的内存来存放。这些类型占用一个Slot。Java中的long和double类型是64位,占用两个Slot。Slot的空间是可以复用的,当pc计数器的值已经超出了某个变量的作用域时,下一个变量不必使用新的Slot空间,可以去覆盖前面那个空间

    ​ **operand stack**操作数栈,当一个方法刚刚开始的时候,这个方法的操作数栈是空的,在方法的执行过程中,会有各种字节码指令往操作数栈中写入和提取内容,也就是入栈和出栈操作.

    ​ **动态链接**,一个方法A调用另一个方法B,或者一个类使用另一个类的成员变量时,总得知道被调用者的名字吧?在Class文件中的常量池中存有大量的符号引用,而被调用者有个这样的符号引用叫做BB,那么在运行期字节码获取到的是BB,然后直接将BB转为方法B来调用,这个在运行期将符号应用转化为直接引用成为动态链接。

    ​ **return value**,返回值。如果方法正常结束调用,则返回方法定义的返回值。如果是异常结束调用,则不会返回方法值给调用者。
3.本地方发栈
4.java堆
5.方法区
上一篇 下一篇

猜你喜欢

热点阅读