博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入解析Java字节码和字节码操作类库ASM源码解析
阅读量:6441 次
发布时间:2019-06-23

本文共 711 字,大约阅读时间需要 2 分钟。

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

你可能感兴趣的文章
Linux中用户和组的介绍及其相关命令
查看>>
IOS 自定义UISwitch
查看>>
正则表达式,替换所有HTML标签的简单实
查看>>
redis-布隆过滤器
查看>>
Object.hashCode()方法与System.identityHashCode(object)的区别
查看>>
vue的todolist -- 增删改查
查看>>
Go圣经-学习笔记入门
查看>>
微软工程师:构建强大的实时流式应用选择Apache Calcite
查看>>
混合云场景下容器技术在新能源功率预测产品中的最佳实践
查看>>
/etc/security/limits.conf的相关说明
查看>>
在docker中使用mysql数据库,在局域网访问
查看>>
10个最佳Node.js企业应用案例:从Uber到LinkedIn
查看>>
XML的解析方式
查看>>
HTTP各版本比较
查看>>
StringUtils.isEmpty和StringUtils.isBlank用法
查看>>
JSON学习
查看>>
echo和Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
查看>>
VC++设置远程调试
查看>>
11-1 11 LAMP复习 安装
查看>>
Android调用JS,带传参到JS需要注意的点
查看>>