我们写的代码,经过编译、经过类加载的各种阶段,进入了JVM的运行时数据区。
但作为程序员真正关心的是代码的执行,代码的执行其实本质上是方法的执行,站在JVM 的角度归根到底还是字节码的执行。main 函数式 JVM指令执行的起点,JVM 会创建 main线程来执行main函数,以触发JVM一系列指令的执行,真正的把 JVM 跑起来。接着,在我们的代码中,就是方法的调用过程,所以了解方法在 JVM 中的调用是非常有必要的。
方法调用的字节码指令
关于方法的调用,Java 字节码共提供了5个指令,来调用不同类型的方法:
- invokestatic 用来调用静态方法
- invokespecial 用来调用私有实例方法、构造器及 super 关键字等
- invokevirtual 用于调用非私有方法,比如 public 和 protected,大多数方法调用属于这一种
- invokeinterface 和上面指令类似,不过作用域接口类
- invokedynamic 用来调用动态方法
非虚方法
如果方法在编译期就确定了具体的调用版本,这个版本在运行时是可变的,这样的方法称为非虚方法。
这不是完整内容,完整内容:http://www.19971001.com/article/33