深入理解JVM——字节码

14 篇文章 0 订阅

字节码

意义

字节码存在的意义就是解决Java跨平台问题,一次编写,到处执行。在不同的操作系统、不同硬件平台上,均可以不同修改代码即可顺畅地执行。作为Java与操作系统的中间码,成功解耦了语言对平台的依赖性。

什么是字节码

Java所有的指令有200个左右,一个字节(8位)可以存储256中不同的指令信息,一个这样的字节称为字节码。在执行过程中,JVM将字节码解释执行,屏蔽对底层操作系统的依赖,JVM也可以将字节码编译执行,如果是热点代码。会通过JIT动态地编译为机器码,提高执行效率。

字节码主要指令

1、加载或存储指令
在某个栈帧中,通过指令操作数据在虚拟机栈的局部变量表和操作栈之间来回传输。

(1)将局部变量加载到操作栈中,ILOAD(将int类型的局部变量压入栈)和ALOAD(将对象引用的局部变量压入栈);
(2)从操作栈定存储到局部变量表,如ISTOREASTORE等;
(3)将常量加载到操作栈顶,ICONST,BIPUSH,SIPUSHLDC等;

在这里插入图片描述
2、运算指令

对两个操作栈帧上的值进行运算,并把结果写入操作栈顶;

3、类型转换指令

显式转换两种不同的数值类型;

4、对象创建于访问指令

(1)创建对象指令,NEWNEWARRAY
(2)访问属性指令;
(3)检查实例类型指令;

5、操作栈管理命令
(1)出栈操作;
(2)赋值栈顶元素并压入栈;

6、方法调用与返回指令

(1)INVOKEVIRTUAL指令:调用对象的实例方法;
(2)INVOKESPECIAL指令:调用实例初始化方法、私有方法、父类方法;
(3)INVOKESTATIC指令:调用类静态方法;
(4)RETURN指令:返回VIOD类型;

源码转为字节码的过程

在这里插入图片描述

  • 词法解析:通过空格分隔出单词、操作符、控制符等信息,将其形成token信息流,传递给语法解析器;
  • 语法解析:在语法解析时,把词法解析得到的token信息流按照Java语法规则组装成一课语法树,
  • 语法分析:在这个阶段需要检查关键字的使用是否合理、类型是否匹配、作用域是否正确等;
  • 生成字节码;
执行方式

字节码必须通过类加载过程加载到JVM环境后才可以执行,执行有三种模式:

  • 解释执行;
  • JIT编译执行;
  • JIT编译和解释混合执行。

混合执行

解释器在启动时先解释执行,省去编译时间,随着时间推进,JVM通过热点代码统计分析,识别出高频的方法调用、循环体、公共模块等,基于强大的JIT动态编译技术,将特典代码转换很久起码,直接交给CPU执行。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值