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