字节码

简介:

学 JVM 是要学写什么,掌握到什么程度?

作为使用者需要了解基本结构。只是看静态的结构比较枯燥,且难以理解结构的作用,为什么要这样设计,另外也不知道自己了解的深度够不够。

学习字节码,可以让你在 JVM 的工作过程中看结构如何发挥作用&联动,这样就会生动得多,并且到字节码这个程度理解结构,深度也够了。

字节码表

Java bytecode 叫字节码,就是 8 位的,现在也还没用完,也就是说还没超过 128 个。在 JVM 里面这些就是最原子的操作符了。

一些有意思的设计

iload_0: load an int value from local variable 0
iload: load an int value from a local variable #index

iload_0 后面不需要再跟一个字节表示第几个 local variable,这样设计是节省字节码文件的空间的。有很多类似的设计。

工作机制

宏观一点看,Java 程序是从一个入口方法进入执行一个接一个的方法,直到退出。微观一点,方法的结构就是一行一行的字节码,JVM 就是读取字节码的指令,一步步操作。

根据我接触到的字节码,我理解主要是三种类型

  1. push data into operand stack
    数据来源可能是 local variables, constant pool 也可能字节码自带了数据,比如 iconst_0
  2. pop data from operand stack & do sth
    比如

fcmpl: 按 float 型 pop 出两个数据,比较大小,根据比较结果 push 一个 int 型到 stack 里
ifle: 按 int 型 pop 出一个数据,和 0 比较,若小于等于则跳转到 ifle 后面跟着的 branchoffset 处

  1. 对 operand stack 没有操作
    goto

参考资料

  1. Java bytecode instruction listings - Wikipedia
  2. 从Java代码到字节码(1) - ImportNew
目录
相关文章
|
5月前
javap反编译字节码文件
javap反编译字节码文件
|
6月前
|
存储 安全 Java
深入理解Java字节码与反编译技术
深入理解Java字节码与反编译技术
110 0
|
6月前
|
存储 Java 编译器
深入理解JVM - 字节码指令
深入理解JVM - 字节码指令
104 0
|
存储 Java 编译器
jvm之字节码指令集解读(上)
jvm之字节码指令集解读(上)
|
存储 人工智能 Java
通过字节码分析i++ 与 ++i
通过字节码分析i++ 与 ++i
|
Java 编译器
字节码文件
字节码文件
155 0
|
前端开发 IDE Java
Java虚拟机学习:方法调用的字节码指令
通过一个实例将JVM方法调用的字节码指令逐个列出,一起来熟悉以下它们使用的场景
298 1
Java虚拟机学习:方法调用的字节码指令
|
Java 编译器 索引
JVM 字节码指令解析(下)
概述本文主要是基于 .class 文件,进行分析 .class 文件的内容。 这部分个人觉得主要是属于设计机构拓展的内容,大家可以一起来学习一下 Java 字节码的设计结构以及感受一下设计者的设计。
114 0
JVM 字节码指令解析(下)
|
存储 Java 索引
JVM 字节码指令解析(上)
概述本文主要是基于 .class 文件,进行分析 .class 文件的内容。 这部分个人觉得主要是属于设计机构拓展的内容,大家可以一起来学习一下 Java 字节码的设计结构以及感受一下设计者的设计。
230 0
JVM 字节码指令解析(上)
|
缓存 文字识别 Java
为什么要推荐大家学习字节码?
为什么要推荐大家学习字节码?
432 0
为什么要推荐大家学习字节码?