从原理聊JVM(四):JVM中的方法调用原理 | 京东云技术团队

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

内容提要

本文介绍了Java中的多态特性和线程执行方法的内存过程,包括栈帧的概念、方法调用的解析和分派。静态分派和动态分派是方法分派的两种方式。

🎯

关键要点

  • 多态是Java语言的重要特性,涉及方法执行时的内存过程。
  • 栈帧存储方法的局部变量表、操作数栈、动态连接和方法返回地址。
  • 局部变量表由变量槽组成,支持多种数据类型,64位环境下需要对齐填充。
  • 变量槽可以复用,节省内存空间,但可能影响垃圾回收。
  • 操作数栈用于临时存储变量和计算中间结果,不能通过指针访问。
  • 动态链接在运行期将符号引用转换为直接引用。
  • 方法返回后会恢复局部变量表和操作数栈,并调整程序计数器。
  • JVM支持五种方法调用字节码指令,分别用于不同类型的方法调用。
  • 解析阶段确定方法调用版本的称为解析,主要适用于静态和私有方法。
  • 静态分派在编译期根据静态类型确定方法版本,动态分派在运行期根据实际类型确定。
  • 静态分派通过参数的静态类型选择方法版本,动态分派通过对象的实际类型选择。
  • invokevirtual指令是实现多态的关键,负责动态匹配方法版本。
➡️

继续阅读