【JVM学习笔记】栈帧

栈帧是一种用于帮助虚拟机执行方法调用与方法执行的数据结构

栈帧本身是一种数据结构,封装了方法的局部变量表、动态链接信息、方法的返回地址以及操作数栈等信息。

栈帧是归属于一个又一个的线程,每一个线程都拥有自己独有的栈帧,所以栈帧不存在并发调用的情况

由于Java的动态链接特性,所以Java具有符号引用和直接引用的概念

slot是存储局部变量的最小单位,对于较小的类型如Short,Byte等,一个slot就可以存储一个局部变量,但是对于较大的类型,可能需要多个slot来进行存储

由于方法体中的局部变量的生命周期可能不尽相同(比如有的for循环里的局部变量生命周期就更短),所以slot可能存在复用的情况,具体依虚拟机实现而定

有些符号引用是在类加载阶段或是第一次使用时就会转换为直接引用,这种转换叫做静态解析,另外一些符号引用则是在每次运行期转换为直接引用,这种转换称为动态链接,动态链接就体现为Java的多态性

伪代码:

Animal a = new Cat();

a.sleep();

a = new Dog()

a.sleep();

猜你喜欢

转载自www.cnblogs.com/heben/p/11470772.html