什么是字节码
字节码是 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 字节码指令列表 。
如何编写/编辑字节码?
有多种方法可以编写和编辑字节码。你可以使用编译器,使用库或使用程序。
写作:
用于编辑:
我想了解更多有关字节码的信息!
可能有一个专门针对字节码的特定文档页面。本页重点介绍使用不同库和工具修改字节码。