从原理聊JVM(四):JVM中的方法调用原理

💡 原文中文,约5500字,阅读约需13分钟。
📝

内容提要

本文介绍了Java中的多态特性和线程执行方法时的内存过程,包括栈帧、局部变量表、操作数栈、动态连接和方法返回地址等。还讲解了局部变量表的组成和变量槽的复用,操作数栈的作用和使用方式,动态链接的作用和方法返回地址的处理方式。最后介绍了方法调用的过程,包括静态分派和动态分派的原理和应用场景。

🎯

关键要点

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

继续阅读