深入解析Java字节码和字节码操作类库ASM源码解析

1168906-20180408130516951-1881667927.png

导语

在非黑即白的静态编译语言和动态脚本语言的分类方法中,java的立场显得很尴尬。首先java是静态强类型语言,所以java源代码是需要编译的。但是javac编译后的产出物并不是和传统的编译语言一样的可以在特定OS上无依赖运行机器码。而是一种介于java源码和硬件机器码之间且运行需要依赖JVM抽象层的中间格式,也就是本文讨论的中心:jvm字节码。注意用词,字节码是属于JVM的,是面向JVM的字节码。

JVM生态分为如下3个部分:java原生语法和与之配套的源码编译器,jvm字节码规范,jvm实现规范。字节码是一套协议或者中间抽象层,是被编译器和虚拟机共同遵守的协议。编译器将源码解析处理成规范的字节码,jvm读取字节码文件magic,装载解析字节码。jvm语言生态如此蓬勃:kotlin,groovy等,都是因为有了字节码这层抽象。不管你定义什么样或现代或简洁的新的语言语法,只要你能配套的实现与之相关的编译器,能够将源码处理成规范的字节码,那么你就能在jvm上运行。字节码的来源对于jvm来说是透明的,jvm才不知道你是java还是kotlin编译来的呢。它只对字节码规范和jvm规范负责。
综上,JVM生态中,无论是上层语言语法层次,还是底层JVM装载运行层次,都只用分别对JVM字节码规范负责。JVM字节码规范的重要性不言而喻。这也是本文讨论的重点。
注意:JVM语言百花齐放的本质原因就是因为JVM没有和Java的语言语法特性绑定,而是和中间字节码绑定,这应该是每一个java开发同学的常识

字节码初探

转载于:https://www.cnblogs.com/jialin16/p/8661772.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值