Java中动态分派和静态分派是如何具体实现的?

2026-05-28 05:060阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计3037个文字,预计阅读时间需要13分钟。

Java中动态分派和静态分派是如何具体实现的?

Java 方法的执行时动态分派和静态分派是 Java 实现多态的本质。背景是 Java 的动态分派和静态分派也是 Java 方法执行原理的一部分。Java 源代码编译后,方法之间的调用是通过使用符号引用来实现的。

Java 方法执行时的动态分派和静态分派是 Java 实现多态的本质

背景

Java 的动态分派和静态分派也是 Java 方法的执行原理。 Java 源代码的编译之后,方法之间的调用是使用符号引用来表示的。当字节码被 JVM 加载之后,符号引用才会被替换为对应方法在方法区的真实内存地址。那么在替换之前,由于 Java 的方法重写、重载,就导致符号引用对应的方法可能是一个虚方法,那么方法的真实实现在运行时就可能有多个。

所以在将符号引用替换为真实地址时,还需要做一件事情:那就是确定符号引用要替换的方法的版本。

运行时方法帧

与 C,C++ 一样,JVM 在运行时也会维护一个运行栈,用于方法的调用和返回。当调用一个方法时,会为方法在栈上分配一块内存区域作为方法的帧。方法调用帧又分为下面几个区域:

局部变量表

存储方法参数和方法体中的局部变量,其容量在编译期就已确定。容量的最小单位是 variable slot(变量槽)。
静态方法的局部变量数就是方法体中声明的变量数;实例方法的局部变量数会多一个,多出的一个就是我们平时在实例方法中访问的this。this 其实是编译器在编译时悄悄加到实例方法上的,而且是作为第一个参数。

阅读全文

本文共计3037个文字,预计阅读时间需要13分钟。

Java中动态分派和静态分派是如何具体实现的?

Java 方法的执行时动态分派和静态分派是 Java 实现多态的本质。背景是 Java 的动态分派和静态分派也是 Java 方法执行原理的一部分。Java 源代码编译后,方法之间的调用是通过使用符号引用来实现的。

Java 方法执行时的动态分派和静态分派是 Java 实现多态的本质

背景

Java 的动态分派和静态分派也是 Java 方法的执行原理。 Java 源代码的编译之后,方法之间的调用是使用符号引用来表示的。当字节码被 JVM 加载之后,符号引用才会被替换为对应方法在方法区的真实内存地址。那么在替换之前,由于 Java 的方法重写、重载,就导致符号引用对应的方法可能是一个虚方法,那么方法的真实实现在运行时就可能有多个。

所以在将符号引用替换为真实地址时,还需要做一件事情:那就是确定符号引用要替换的方法的版本。

运行时方法帧

与 C,C++ 一样,JVM 在运行时也会维护一个运行栈,用于方法的调用和返回。当调用一个方法时,会为方法在栈上分配一块内存区域作为方法的帧。方法调用帧又分为下面几个区域:

局部变量表

存储方法参数和方法体中的局部变量,其容量在编译期就已确定。容量的最小单位是 variable slot(变量槽)。
静态方法的局部变量数就是方法体中声明的变量数;实例方法的局部变量数会多一个,多出的一个就是我们平时在实例方法中访问的this。this 其实是编译器在编译时悄悄加到实例方法上的,而且是作为第一个参数。

阅读全文