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

jvm-invokestatic vs invokevirtual

时间:2020-12-22 11:58:07      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:stat   加载   继承   执行者   面向   分析   ati   指令   类变量   

对比invokevirtual 和 invokestatic 两个 jvm指令的区别

 

从 hikaricp 数据库连接池 的性能优化点 作为切入点进行分析

invokevirtual 的作用实际是 调用实例化对象中的对象方法,其会按照从当前实际对象类型进行方法查找,按照继承或实现 层级关系 依次往上查找,直到找到离当前实现类最近的一个方法。  这实际上就是多态的原理,java作为面向对象或面向接口编程,但真正的执行者为堆中实例化对象的实际类型

 

invokestatic 实际是面向类的指令,对于一个 类加载到jvm中,根据class文件加载过程,在执行过程中实际会将类中的相关静态(static)修饰的类变量(常量,对于static修饰的属性一般会搭配final关键字,表示其不可变的特性),静态方法的装载或静态代码块的执行。  

 

对于invokevitual和invokestatic 实际就是针对 对象方法和类方法的不同指令, 相对来讲对于对象方法由于java继承和多态的缘故,会导致对象方法查找流程变长。而对于类方法只属于当前类,因此在jvm调用阶段查找路径最短,所以invokestatic会带来一定的性能提升

 

jvm-invokestatic vs invokevirtual

标签:stat   加载   继承   执行者   面向   分析   ati   指令   类变量   

原文地址:https://www.cnblogs.com/xingguoblog/p/14141954.html

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