码迷,mamicode.com
首页 > 其他好文 > 详细

JVM方法调用

时间:2018-08-19 23:25:21      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:字节码   java编译   描述   父类   这一   符号   nbsp   极客   构造   

JVM的静态绑定和动态绑定

JVM识别方法的关键在于类名、方法名及方法描述符(method descriptor)。方法描述符是由方法的参数类型和返回类型所构成。在同一个类中,如果同时出现多个类名方法名以及描述符都相同的方法,java虚拟机会在类的验证阶段报错。

java虚拟机与java语言不同,JVM不限制方法名和参数类型相同,返回类型不同的方法出现在同一个类中,对于调用这些方法的字节码来说,由于字节码所附带的方法描述符包含了返回类型,因此java虚拟机能够准确的识别目标方法。

java虚拟机的静态绑定:指的是在解析时便能够直接识别目标方法的情况。

java虚拟机的静态绑定:指的是需要在运行过程中根据调用者的动态类型来识别目标方法的情况。

JVM提供了如下方法调用指令:

1、invokestatic: 调用静态方法。

2、invokespecial: 调用私有实例方法、构造器,以及使用super关键字调用父类的实例方法或构造器,和所有实现接口的默认方法。

3、invokevirtual: 调用虚方法即非私有的实例方法。

4、invokeinterface: 调用接口方法,在运行时再确定一个实现此接口的对象。

5、invokedynamic: 调用动态方法,在运行时动态解析出调用点限定符所引用的方法之后,调用该方法。

调用指令的符号引用

在编译过程中,我们并不知道目标方法的具体内存地址。因此,java编译器会暂时用符号应用来表示该目标方法。这一符号引用包括目标方法所在的类或接口的名字,以及目标方法的方法名或方法描述符。

符号应用存储在class文件的常量池中。根据目标方法是否为接口。这些引用可分为接口符号引用和非接口符号引用。在执行符号引用的字节码前,java虚拟机需要解析这些符号引用,并替换为实际引用。

注:此文为极客时间郑雨迪专栏,java虚拟机讲解及自己查资料的学习总结。郑雨迪《深入拆解Java虚拟机》很不错。

 

JVM方法调用

标签:字节码   java编译   描述   父类   这一   符号   nbsp   极客   构造   

原文地址:https://www.cnblogs.com/cathyqq/p/9503052.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!