字节码是JVM的核心

Posted 写Bug的渣渣高

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节码是JVM的核心相关的知识,希望对你有一定的参考价值。

上文说到,Java 是解释器+编译器并存的架构, 下面来看看在这个基础上, 字节码是什么样的存在.

提示:
上一篇讲述的是 JVM 是编译器+即时编译架构的
下一篇将要讲述 Class 文件
本文很短, 最好的阅读顺序是这三篇一起看

其实 Java 的解释器+编译器并存的架构, 其实还有些需要注意的地方
![[Pasted image 20230312141130.png]]
这里的编译器+解释器, 指的是 Java 解释器以及即时编译器. 这对应的是将字节码转换成底层代码的两种方式.
一定不要理解成生成字节码有两种形式

然后我们看看字节码是什么样的存在

我们联想一个最常见的编译型语言: C 语言,C 语言 windows 下回生成一个 exe 可执行文件.
再来看看呢? 字节码可以直接执行吗?

不可用, 非常不可以

那么字节码有什么用呢?
字节码是一个规范, 对于 C 语言来说, 如果是 linux 环境, 那么中间文件就不会是 exe 文件了吧, 这对于 C 语言来说, 就需要将 C 语言代码转换成 Linux 中的可执行文件.
而字节码呢? 字节码的存在, 在不同平台中, 是通用的, 这是一个规范, 虽然说这个字节码, 不可以直接运行 (注意我这里指的是字节码不是一种可执行文件, 他需要额外的解释器或者 JIT 即时编译器来生成机器码), 但是但是我们所有平台就只需要去针对字节码去开发不同平台的解释器和 JIT 即时编译器即可, 也就是说, 有了字节码, 是可以实现一次编译, 到处执行的

为什么说字节码是核心呢

不同平台中的 JVM 虚拟机, 也都是正对于字节码进行开发和设计的, 字节码是通用的, 而其他的虚拟机各种运行时数据区啊, 方法区啊, 都是根据虚拟机规范, 但是不同的虚拟机可能在设计上会有一些差别, 但是都是正对于字节码这个东西而来的.

为什么字节码叫字节码呢?
一个 Java 字节码指令的操作码, 被固定为一个字节

以上是关于字节码是JVM的核心的主要内容,如果未能解决你的问题,请参考以下文章

JVM进阶之路十二:字节码指令

[jvm解析系列][十一]字节码执行之栈帧,你的字节码是如何运行的?

JVM字节码格式

JVM进阶之路十二:字节码指令

JVM进阶之路十二:字节码指令

JVM-字节码