标签: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