这是我们所说的java虚拟机的运行流程,平常我们的编译动作通常都是我们使用编辑器来进行的,然后直接交给jvm去执行了,手动一般很少用到,下面就看看手动是怎么操作。
java源码编译成.class字节码,要使用到的是jdk自带的javac命令,看下简介:
我们用的时候可以这样,
这就把Test.java文件编译成了.class字节码文件,
字节码文件反编译:
一般我们可以使用这个工具反编译,就是把.class文件变成.java文件
网上随便找一下,就有,用这个工具打开.class文件就是这个效果
反汇编:
我们使用java是高级语言,经过编译程序生成可以被java虚拟机直接执行的字节码.class文件。反汇编就是指将这些执行的.class文件反编译还原成汇编语言。
那问题来了,那反汇编能干啥呢?
这就要看反汇编之后,我们能看到啥,有啥奥秘在里边,
这里我们用到的是javap命令
这就是反汇编后的结果,
这就可以详细的看到这个文件执行的时候的内存是怎么操作的,每一步都在干啥,
比如
0: aload_0 就是 取this对应的对应引用值,压入操作数栈
0: ldc 就是 从常量池中取出字符串“GB876” 压入栈
具体每步表示什么含义可以参考Oracle的官方文档:
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.areturn
这里边有详细的解释。
java手动编译,反编译,反汇编
最新推荐文章于 2024-08-21 11:25:33 发布