什么是字节码

字节码是 JVM 使用的指令集。为了说明这一点,我们来看看这个 Hello World 程序。

public static void main(String[] args){
    System.out.println("Hello World");
}

这是编译成字节码时的结果。

public static main([Ljava/lang/String; args)V    
    getstatic java/lang/System out Ljava/io/PrintStream;
    ldc "Hello World"
    invokevirtual java/io/PrintStream print(Ljava/lang/String;)V

这背后的逻辑是什么?

getstatic - 检索类的静态字段的值。在这种情况下, PrintStreamOut of System

ldc - 将常量推入堆栈。在这种情况下,字符串 Hello World

invokevirtual - 在堆栈上的已加载引用上调用方法,并将结果放在堆栈上。该方法的参数也取自堆栈。

那么,还有更多的权利吗?

有 255 个操作码,但并非所有操作码都已实现。可以在此处找到包含所有当前操作码的表: Java 字节码指令列表

如何编写/编辑字节码?

有多种方法可以编写和编辑字节码。你可以使用编译器,使用库或使用程序。

写作:

用于编辑:

我想了解更多有关字节码的信息!

可能有一个专门针对字节码的特定文档页面。本页重点介绍使用不同库和工具修改字节码。