从原理聊JVM(四):JVM中的方法调用原理
💡
原文中文,约5500字,阅读约需13分钟。
📝
内容提要
本文介绍了Java中的多态特性和线程执行方法时的内存过程,包括栈帧、局部变量表、操作数栈、动态连接和方法返回地址等。还讲解了局部变量表的组成和变量槽的复用,操作数栈的作用和使用方式,动态链接的作用和方法返回地址的处理方式。最后介绍了方法调用的过程,包括静态分派和动态分派的原理和应用场景。
🎯
关键要点
- 多态是Java语言的重要特性,涉及线程执行方法时的内存过程。
- 栈帧存储方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。
- 局部变量表由变量槽组成,支持多种数据类型的存储。
- 变量槽可以复用以节省内存,但可能影响垃圾回收。
- 操作数栈用于临时存储计算所需变量和中间结果,不能通过指针访问。
- 动态链接在运行期将符号引用转换为直接引用。
- 方法返回地址在正常完成和异常退出时的处理方式不同。
- 方法调用的符号引用在类加载时或运行期间才能确定。
- JVM支持五种方法调用字节码指令,分别用于不同类型的方法调用。
- 解析阶段确定的方法调用版本称为解析,主要适用于静态和私有方法。
- 静态分派在编译期根据静态类型确定方法版本,动态分派在运行期根据实际类型确定。
- 静态分派适用于重载,动态分派适用于重写。
- Java中只有虚方法,没有虚字段,子类字段覆盖父类字段。
➡️