JVM虚拟机
- 图片源自B站视频
java 栈
- 图片源自B站视频
每一个方法被调用时,就有一个新的栈帧被创建。当方法调用完成时,不管是抛出异常还是正常返回栈帧都会被销毁。栈帧由java虚拟机栈中创建该栈帧的线程来分配。每个栈帧都有自己的本地变量,操作数栈,动态链接(返回方法的值或者抛出的异常)。
局部变量表(Local Variables):每个栈帧都有一个局部变量表(一个数组),可以存放类型为boolean, byte, char, short, int, float, reference, or returnAddress。在32位JVM中long,double类型占用连续两个变量位置。每一个栈中的变量表从0号位开始,0号位位当前方法的调用者(this),任何局部变量都是从变量表 1号位开始。
操作数栈(Operand Stacks):JVM提供指令加载常量或者值从本地方法列表或者属性到操作数栈。其他Java JVM可以对操作数栈中的值进行操作(计算),然后弹栈返回结果到操作数栈。操作数栈也用作方法参数的传递以及接收方法的返回值。 任何时候每个操作数栈都有自己的深度,long、double都要占用两个单元深度,其他的类型的值占用一个操作数单元。
操作数栈命令
动态链接(Dynamic Linking):每个栈帧都会引用一个支持动态链接到当前方法区方法的运行时常量池。被引用到的字节码方法会被调用,变量将可以通过符号引用进行访问。动态链接将这些符号链接翻译为具体的方法引用,加载还没有符号引用的的类,翻译变量的内存地址与运行时的内存地址将关联。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。