在前面的文章中,有详细地介绍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 则需要找几次才能确定方法

所以阿里巴巴开发手册不推荐使用对象来调用静态方法,而是直接用类名来调用,避免增加编译器解析成本。


文章最后,给大家推荐一些受欢迎的技术博客链接

  1. Hadoop相关技术博客链接
  2. Spark 核心技术链接
  3. JAVA相关的深度技术博客链接
  4. 超全干货--Flink思维导图,花了3周左右编写、校对
  5. 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
  6. 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
  7. 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂

欢迎扫描下方的二维码或 搜索 公众号“10点进修”,我们会有更多、且及时的资料推送给您,欢迎多多交流!

Java字节码角度分析方法调用 ——提升硬实力7相关推荐

  1. Java字节码角度分析多态原理 ——提升硬实力8

    在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...

  2. Java字节码角度分析:Synchronized ——提升硬实力11

    在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...

  3. java 字节码查看_一种查看java字节码时显示方法调用关系图的方法与流程

    本发明涉及一种代码逻辑分析方法,具体涉及一种查看java字节码时显示方法调用关系图的方法. 背景技术: 目前软件反编译领域有不少对可执行文件进行反编译的工具如IDA,也有对Java代码生成的中间码文件 ...

  4. java异常 字节码,Java字节码角度分析异常处理

    目录 从字节码角度来分析:异常处理 1.1 异常-catch // 从字节码角度来分析:异常处理 public class T13_ByteAnalyseException { public stat ...

  5. 深入浅出Java复用类【从字节码角度看toString调用机制、对象代理、组合与继承、转型、final、初始化】

    这个世界上有10种人:一种是懂二进制的,一种是不懂二进制的 你觉得类是在什么时候被加载的?[访问static域时,为什么?看完9就明白了] 文章目录 1.深入理解Java中toString方法的调用机 ...

  6. 从字节码角度分析Byte类型变量b++和++b

    1. 下面是一到Java笔试题: 1 public class Test2 2 { 3 public void add(Byte b) 4 { 5 b = b++; 6 } 7 public void ...

  7. 虚拟机字节码执行引擎-方法调用

    你未必出类拔萃,但一定与众不同 方法调用 文章目录 方法调用 概述 解析 分派 静态分派 动态分派 单分派与多分派 虚拟机动态分派的实现 概述 方法调用并不等同与方法中的代码被执行,方法调用阶段唯一的 ...

  8. 【易懂】Java源码角度分析put()与putIfAbsent()的区别——源码分析系列

    一.put()方法 1. 源码分析 Java中并未给出put()的源码,因此我们看一下put()方法中给出的注释: Associates the specified value with the sp ...

  9. java try resource_从 Java 字节码角度看 try with resource 语法糖

    Java 7中的 try-with-resource,在没有这个语法糖的情况下的等价实现是什么? 以下面的demo为例,这个问题目测99%的人都写不完全正确,不信来战. public static v ...

最新文章

  1. 兼容浏览器_你知道什么是跨浏览器兼容吗?
  2. Java设计模式-桥接模式 理论代码相结合
  3. php的主要架构,php运行原理与基本结构
  4. ajax预加载html seo,前端性能优化 — JS预加载和懒加载
  5. Retrofit的网络框架介绍
  6. 基于JAVA+SpringMVC+MYSQL的考研帮社区管理系统
  7. dbcp 连接都会被断开_科普帖:软件与数据库连接的机制是怎样的?
  8. php中怎么函数加字符串,如何使用PHP中的字符串函数
  9. iphone怎么换手机铃声?只需要一招 iRingg
  10. [HTTP权威指南]2.HTTP连接管理
  11. 关于qcom camera cpp driver 的buf分析笔记(msm8996)
  12. Python交流QQ群
  13. 突发!意外!华芯通公司将于4月30日关闭
  14. iphone ios 视频特效,视频合成
  15. unity找到指定名称的一个物体的子物体,多个子物体有相同的名称
  16. jQuery赋值checked的几种写法:
  17. Google账户设置
  18. 俄罗斯方块java消行_Tetris ai 俄罗斯方块自动消行程序
  19. BASE64编码的图片在网页中的显示问题
  20. 学术资源链接(英文论文、书籍等)

热门文章

  1. 我在成都火车站捡了个彝族美女 第19节:饭来张口的生活
  2. 个人理财--知识点总结
  3. 图扑 Web SCADA 零代码组态水泥生产工艺流程 HMI
  4. 说话人识别(声纹识别)综述
  5. 哪个计算机无法做到双屏显示,如何实现笔记本电脑的双屏显示
  6. WSO2一般使用教程
  7. jadx学习记录01
  8. JAVA使用 Shade 进行依赖冲突处理
  9. 银行系统日终结算要多久_银行 核心系统的清算与结算 - 系统性能与软件架构 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  10. 黑马程序员---wpf学习笔记四---banding的那些事