JVM内存模型
研究了一波JVM,自己把手头的资料做一些整理。
一,JVM演变史
图出处:https://blog.csdn.net/dyangel2013/article/details/106588217
动态链接:
-
运行时常量池中该栈帧所属方法的引用。包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接(Dynamic Linking) 。比如: invokedynamic指令
-
Java源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号引用(Symbolic Reference)保存在class文件的常量池里。比如:描述一个方法调用了另外的其他方法时,就是通过常量池中指向方法的符号引用来表示的,那么动态链接的作用就是为了将这些符号引用转换为调用方法的直接引用。
图出处:https://blog.csdn.net/dyangel2013/article/details/106588217
方法返回地址:
当一个方法开始执行以后,只有两种方法可以退出当前方法:
-
当执行遇到返回指令,会将返回值传递给上层的方法调用者,这种退出的方式称为正常完成出口,一般来说,调用者的PC计数器可以作为返回地址。
-
当执行遇到异常,并且当前方法体内没有得到处理,就会导致方法退出,此时是没有返回值的,称为异常完成出口,返回地址要通过异常处理器表来确定。
-
当方法返回时,有三个操作:
- 恢复上层方法的局部变量表和操作数栈。
- 把返回值压入调用者调用者栈帧的操作数栈,异常返回时没有返回值。
- 调整PC计数器的值以指向方法调用指令后面的一条指令。