字节码

作者: riveraiyanzi | 来源:发表于2018-08-12 16:09 被阅读6次

学 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 处
  3. 对 operand stack 没有操作
    goto

参考资料

  1. Java bytecode instruction listings - Wikipedia
  2. 从Java代码到字节码(1) - ImportNew

相关文章

  • 字节码引用检测原理与实战

    一、字节码与引用检测 1.1 Java字节码 本章中的字节码重点研究Java 字节码,Java字节码(Java b...

  • JVM知识精粹

    1.jvm执行字节码文件 流程:jvm通过类加载器加载字节码文件----字节码校验器---翻译字节码(解释执行,反...

  • 11_JVM学习笔记_字节码剖析

    字节码剖析 示例代码: 反编译信息如下: 字节码文件16进制 Java字节码结构 Class字节码中有两种数据类型...

  • 03-字节码的结构

    字节码的整体结构 字节码整体分为10个部分 所占字节分类备注4个字节Magic Number(魔数)正确字节码标识...

  • 22. java虚拟机总结-从栈帧看字节码 (五)

    怎么查看字节码文件?字节码文件长什么样子?对象初始化之后,具体的字节码又是怎么执行的? 查看字节码的工具 java...

  • 可爱的字节码&修改

    1.为什么要修改字节码 字节码是java多平台运行的根本原因,程序运行的状态和结果都由字节码决定。所以控制了字节码...

  • art虚拟机解释执行

    art 可以解释执行dex字节码, 解释执行:读一行dex字节码执行该字节码 art/runtime/interp...

  • 程序员练级攻略(2018):Java底层知识

    Java 字节码相关 首先,Java 最黑科技的玩法就是字节码编程,也就是动态修改或是动态生成 Java 字节码。...

  • JVM

    JVM 基础-类字节码详解 多语言编译为字节码在 JVM 运行 Java 字节码文件-- Class文件的结构属性...

  • Javassist指引(一)

    原文链接 [TOC] 1. 读写字节码 1.1概述 Javassist是一个Java字节码类库。Java的字节码是...

网友评论

      本文标题:字节码

      本文链接:https://www.haomeiwen.com/subject/aqisbftx.html