Java字节码角度分析方法调用 ——提升硬实力7
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下。
1.Java字节码的一段旅行经历——提升硬实力1
2.Java字节码角度分析a++ ——提升硬实力2
3.Java字节码角度分析条件判断指令 ——提升硬实力3
4.Java字节码角度分析循环控制 ——提升硬实力4
5.Java字节码角度分析判断结果 ——提升硬实力5
6.Java字节码角度分析构造方法 ——提升硬实力6
下面我们将以字节码的视角来方法调用,java代码如下:
// 从字节码角度来分析:方法调用
public class T11_ByteAnalyseMethod {// 构造方法public T11_ByteAnalyseMethod() {}// 私有成员方法 test1private void test1() {}// 私有最终方法 test2private final void test2() {}// 公开成员方法 test3public void test3() {}// 公开静态方法 test4public static void test4() {}public static void main(String[] args) {T11_ByteAnalyseMethod d = new T11_ByteAnalyseMethod();d.test1(); // 通过对象.调用私有成员方法 test1d.test2(); // 通过对象.调用私有最终方法 test2d.test3(); // 通过对象.调用公开成员方法 test3d.test4(); // 通过对象.调用公开静态方法 test4T11_ByteAnalyseMethod.test4(); // 通过类.调用私有成员方法 test4}
}
T11_ByteAnalyseMethod 字节码:使用javap -v T11_ByteAnalyseMethod.class,将java程序对应的字节码如下,并做了执行的注释。
0: new #2 // 创建一个对象,并且其引用进栈
3: dup // 复制栈顶数值,并且复制值进栈
4: invokespecial #3 // Method "<init>":()V 调用超类构造方法、实例初始化方法、私有方法
7: astore_1 // 将栈顶数值存入当前局部变量表1号槽位,栈顶数值出栈。
8: aload_1 // 当前局部变量表1号槽位变量进栈
9: invokespecial #4 // Method test1:()V 调用超类构造方法、实例初始化方法、私有方法
12: aload_1 // 当前局部变量表1号槽位变量进栈
13: invokespecial #5 // Method test2:()V 调用超类构造方法、实例初始化方法、私有方法
16: aload_1 // 当前局部变量表1号槽位变量进栈
17: invokevirtual #6 // Method test3:()V 调用实例方法
20: aload_1 // 当前局部变量表1号槽位变量进栈
21: pop // 栈顶数值出栈
22: invokestatic #7 // Method test4:()V 调用静态方法
25: invokestatic #7 // Method test4:()V 调用静态方法
28: return
上述需要特别注意的是:通过实例对象.调用静态方法,在字节码层面角度可以看到入栈又出栈,效率低下。
说明:
- invokespecial 与 invokestatic 两者性能差不多
- invokevirtual 则需要找几次才能确定方法
所以阿里巴巴开发手册不推荐使用对象来调用静态方法,而是直接用类名来调用,避免增加编译器解析成本。
文章最后,给大家推荐一些受欢迎的技术博客链接:
- Hadoop相关技术博客链接
- Spark 核心技术链接
- JAVA相关的深度技术博客链接
- 超全干货--Flink思维导图,花了3周左右编写、校对
- 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
- 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
- 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂
欢迎扫描下方的二维码或 搜索 公众号“10点进修”,我们会有更多、且及时的资料推送给您,欢迎多多交流!
Java字节码角度分析方法调用 ——提升硬实力7相关推荐
- Java字节码角度分析多态原理 ——提升硬实力8
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...
- Java字节码角度分析:Synchronized ——提升硬实力11
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...
- java 字节码查看_一种查看java字节码时显示方法调用关系图的方法与流程
本发明涉及一种代码逻辑分析方法,具体涉及一种查看java字节码时显示方法调用关系图的方法. 背景技术: 目前软件反编译领域有不少对可执行文件进行反编译的工具如IDA,也有对Java代码生成的中间码文件 ...
- java异常 字节码,Java字节码角度分析异常处理
目录 从字节码角度来分析:异常处理 1.1 异常-catch // 从字节码角度来分析:异常处理 public class T13_ByteAnalyseException { public stat ...
- 深入浅出Java复用类【从字节码角度看toString调用机制、对象代理、组合与继承、转型、final、初始化】
这个世界上有10种人:一种是懂二进制的,一种是不懂二进制的 你觉得类是在什么时候被加载的?[访问static域时,为什么?看完9就明白了] 文章目录 1.深入理解Java中toString方法的调用机 ...
- 从字节码角度分析Byte类型变量b++和++b
1. 下面是一到Java笔试题: 1 public class Test2 2 { 3 public void add(Byte b) 4 { 5 b = b++; 6 } 7 public void ...
- 虚拟机字节码执行引擎-方法调用
你未必出类拔萃,但一定与众不同 方法调用 文章目录 方法调用 概述 解析 分派 静态分派 动态分派 单分派与多分派 虚拟机动态分派的实现 概述 方法调用并不等同与方法中的代码被执行,方法调用阶段唯一的 ...
- 【易懂】Java源码角度分析put()与putIfAbsent()的区别——源码分析系列
一.put()方法 1. 源码分析 Java中并未给出put()的源码,因此我们看一下put()方法中给出的注释: Associates the specified value with the sp ...
- java try resource_从 Java 字节码角度看 try with resource 语法糖
Java 7中的 try-with-resource,在没有这个语法糖的情况下的等价实现是什么? 以下面的demo为例,这个问题目测99%的人都写不完全正确,不信来战. public static v ...
最新文章
- 兼容浏览器_你知道什么是跨浏览器兼容吗?
- Java设计模式-桥接模式 理论代码相结合
- php的主要架构,php运行原理与基本结构
- ajax预加载html seo,前端性能优化 — JS预加载和懒加载
- Retrofit的网络框架介绍
- 基于JAVA+SpringMVC+MYSQL的考研帮社区管理系统
- dbcp 连接都会被断开_科普帖:软件与数据库连接的机制是怎样的?
- php中怎么函数加字符串,如何使用PHP中的字符串函数
- iphone怎么换手机铃声?只需要一招 iRingg
- [HTTP权威指南]2.HTTP连接管理
- 关于qcom camera cpp driver 的buf分析笔记(msm8996)
- Python交流QQ群
- 突发!意外!华芯通公司将于4月30日关闭
- iphone ios 视频特效,视频合成
- unity找到指定名称的一个物体的子物体,多个子物体有相同的名称
- jQuery赋值checked的几种写法:
- Google账户设置
- 俄罗斯方块java消行_Tetris ai 俄罗斯方块自动消行程序
- BASE64编码的图片在网页中的显示问题
- 学术资源链接(英文论文、书籍等)
热门文章
- 我在成都火车站捡了个彝族美女 第19节:饭来张口的生活
- 个人理财--知识点总结
- 图扑 Web SCADA 零代码组态水泥生产工艺流程 HMI
- 说话人识别(声纹识别)综述
- 哪个计算机无法做到双屏显示,如何实现笔记本电脑的双屏显示
- WSO2一般使用教程
- jadx学习记录01
- JAVA使用 Shade 进行依赖冲突处理
- 银行系统日终结算要多久_银行 核心系统的清算与结算 - 系统性能与软件架构 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- 黑马程序员---wpf学习笔记四---banding的那些事