浅谈Java字节码

什么是字节码?

Java bytecode 由单字节(byte)的指令组成,理论上最多支持 256 个操作码(opcode)。 实际上 Java 只使用了200左右的操作码, 还有一些操作码则保留给调试操作。

根据指令的性质,主要分为四个大类:
1. 栈操作指令,包括与局部变量交互的指令 2. 程序流程控制指令
3. 对象操作指令,包括方法调用指令
4. 算术运算以及类型转换指令

生成字节码

假如有一个最简单的类,源代码如下:

编译:

javac demo/jvm/HelloByteCode.java

查看字节码:

javap -c demo.jvm.HelloByteCode

0: aload_0       

//把本地表量表(局部方法表)第0个位置上的变量加载到栈上去执行,占用一个字节,a前缀表示引用类型

1: invokespecial #1                        // Method java/lang/Object."<init>":()V

注释表示调用了当前父类Object初始化的方法,占用三个字节:1字节操作码,还可跟两个字节操作数,#1表示来自常量池中的常量

4: return

以上均为操作码,当加载到虚拟机,虚拟机会诶个去执行

打印常量池:

javap -c -verbose demo/jvm/HelloByteCode

如需查看本地变量表等信息(debug)   

需要在编译的时候执行:

javac -g demo/jvm/HelloByteCode.java
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值