java手动编译,反编译,反汇编

在这里插入图片描述
这是我们所说的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
这里边有详细的解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值