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