Java为何在方法调用与内联之间寻求微妙平衡?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1217个文字,预计阅读时间需要5分钟。
在Java中,方法调用一般通过两种方式:Virtual Call和Classic Call。Classic Call直接指向方法地址,只需一次寻址,效率较高。而Virtual Call需要通过VMT(Virtual Method Table)进行查找,涉及更多寻址步骤,效率较低。
在 Java 中,方法调用一般通过 Virtual Call 还有 Classic Call。
Classic Call 就是直接指向方法的地址,需要一次寻址到方法的地址,比直接执行代码慢。
Virtual Call 需要通过 VMT(Virtual Method Table)。这个VMT存储的是该class对象中所有的Virtual Method,程序运行的时候首先加载实例对象,然后通过实例对象找到VMT,通过VMT再找到对应的方法地址,再执行代码。所以比 Classic Call 更慢。
Java 中除了 static 方法,private 方法以及构造器是 Classic Call 之外,基本都是 Virtual Call。
为了优化,JVM 运行时,JVM使用混合模式来从字节码转换成机器可以运行的机器码,混合模式包括解释器和JIT:
解释器工作机制:
在编译时,主要是将java源代码文件编译为java统一的字节码,但是编译成的字节码并不能直接运行,而是通过JVM读取运行。
本文共计1217个文字,预计阅读时间需要5分钟。
在Java中,方法调用一般通过两种方式:Virtual Call和Classic Call。Classic Call直接指向方法地址,只需一次寻址,效率较高。而Virtual Call需要通过VMT(Virtual Method Table)进行查找,涉及更多寻址步骤,效率较低。
在 Java 中,方法调用一般通过 Virtual Call 还有 Classic Call。
Classic Call 就是直接指向方法的地址,需要一次寻址到方法的地址,比直接执行代码慢。
Virtual Call 需要通过 VMT(Virtual Method Table)。这个VMT存储的是该class对象中所有的Virtual Method,程序运行的时候首先加载实例对象,然后通过实例对象找到VMT,通过VMT再找到对应的方法地址,再执行代码。所以比 Classic Call 更慢。
Java 中除了 static 方法,private 方法以及构造器是 Classic Call 之外,基本都是 Virtual Call。
为了优化,JVM 运行时,JVM使用混合模式来从字节码转换成机器可以运行的机器码,混合模式包括解释器和JIT:
解释器工作机制:
在编译时,主要是将java源代码文件编译为java统一的字节码,但是编译成的字节码并不能直接运行,而是通过JVM读取运行。

