Java编译与反编译

本文详细介绍了Java的编译过程,包括从.java到.class的编译,涉及词法、语法和语义分析,以及JVM的解释执行与JIT编译。在反编译部分,讨论了如何将.class文件还原为Java源代码,并列举了常用的反编译工具,如javap,通过实例展示了自动拆装箱的实现细节。
摘要由CSDN通过智能技术生成

一、Java编译原理

Java 源代码编译执行的过程:
这里写图片描述
如图所示:

1、.java到.class的编译

第一行为java源程序编译为class文件的过程,其中,词法分析是将java文件一个字符一个字符读入,将其转换为标记序列,如:括号可以识别为一个标记,但该标记并不判断是否有与其匹配的括号。
语法分析则是分析程序语法是否正确,括号是否正确匹配,关键词书写的正确性,程序格式是否正确等。
语义分析则是分析程序逻辑是否正确,如是否正确完成类型转换,异常是否捕获等,是关注程序逻辑的编译阶段。之后将会生成class文件。

2、.class文件的解释执行与JIT编译

JVM加载class文件后会对代码进行优化,然后由解释器进行解释执行,执行过程中JIT编译器会对执行中的代码进行热点检测,找到经常执行的热点代码,将其编译为机器码后缓存起来,在下次调用时不需要解释执行,直接执行机器码。
HotSpot热点代码检测方式:
1、方法计数器:
每次执行方法后计数器加一,达到一定阈值后认定为是热点代码。
2、回边计数器:每个代码块被执行后(for循环、while循环等),计数器加一,达到阈值认定为是热点代码。

二、反编译

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值