JVM方法调用的实现方式

JVM方法调用的实现

  • JVM的方法调用共有五种类型,分别是:invokestatic、invokespecial、invokevirtual、invokeinterface、invokedynamic
    • invokestatic:调用静态方法的时候
    • invokespecial:调用私有实例方法及构造器,调用父类实例方法及构造器,调用实现方法时
    • invokevirtual:调用实例非私有方法的时候
    • invokeinterface:调用接口方法的时候
    • invokedynamic:调用动态方法的时候
  • 在类加载的准备阶段,JVM除了会为静态字段分配内存写入零值外,还会为虚方法初始化方法表,方法表实质上是一个数组,数组的值指向当前类及其父类的非私有实例方法(对应的方法指令是invokevirtual、invokeinterface)
  • 虚方法是基于方法表实现目标方法的动态绑定,存在一定的性能消耗。不过这种消耗在JVM的优化下已经变的微乎其微,优化策略包括内联和缓存,简单说明一下二者的实现:
    • 内联:将调用方法复制一份到引点处,减少栈帧的产生提高响应速度
    • 缓存:将调用频繁的虚方法进行缓存,减少方法表的遍历比对产生的性能消耗
posted @ 2021-05-12 15:49  鹿小虎  阅读(97)  评论(0)    收藏  举报