您的位置:首页 > 数码常识数码常识
Java代码反编译(java编译和反编译)
2025-05-14人已围观
Java代码反编译(java编译和反编译)
一、Java编译原理
java编译和反编译
Java 源代码编译执行的过程:
如图所示:
1、.java到.class的编译
第一行为java源程序编译为class文件的过程,其中,词法分析是将java文件一个字符一个字符读入,将其转换为标记序列,如:括号可以识别为一个标记,但该标记并不判断是否有与其匹配的括号。
语法分析则是分析程序语法是否正确,括号是否正确匹配,关键词书写的正确性,程序格式是否正确等。
语义分析则是分析程序逻辑是否正确,如是否正确完成类型转换,异常是否捕获等,是关注程序逻辑的编译阶段。之后将会生成class文件。
2、.class文件的解释执行与JIT编译
JVM加载class文件后会对代码进行优化,然后由解释器进行解释执行,执行过程中JIT编译器会对执行中的代码进行热点检测,找到经常执行的热点代码,将其编译为机器码后缓存起来,在下次调用时不需要解释执行,直接执行机器码。
HotSpot热点代码检测方式:
1、方法计数器:
每次执行方法后计数器加一,达到一定阈值后认定为是热点代码。
2、回边计数器:每个代码块被执行后(for循环、while循环等),计数器加一,达到阈值认定为是热点代码。
二、反编译
反编译即是将class文件还原成java源程序的过程,常用的反编译工具有 javap、jd、cfr等。
例:反编译查看自动拆装箱的实现
代码:
反编译结果:
可以看到Integer到int的转换通过对象的intValue()方法完成,int到Integer的转换则由Integer的静态方法valueOf()完成。通过反编译可以发现,自动拆装箱是java通过语法糖实现的。
上面就是小居数码小编今天给大家介绍的关于(java编译和反编译)的全部内容,希望可以帮助到你,想了解更多关于数码知识的问题,欢迎关注我们,并收藏,转发,分享。
94%的朋友还想知道的:
无法激活的解决办法(autocad2020安装失败错误代码1603)
按键精灵定时启动脚本的代码(脚本也能有定时功能吗)
统计工程代码总行数(怎么统计项目代码行数)
如何把本地代码上传到git教程图文(如何把本地代码上传到github)
154466
一、Java编译原理
java编译和反编译
Java 源代码编译执行的过程:
如图所示:
1、.java到.class的编译
第一行为java源程序编译为class文件的过程,其中,词法分析是将java文件一个字符一个字符读入,将其转换为标记序列,如:括号可以识别为一个标记,但该标记并不判断是否有与其匹配的括号。
语法分析则是分析程序语法是否正确,括号是否正确匹配,关键词书写的正确性,程序格式是否正确等。
语义分析则是分析程序逻辑是否正确,如是否正确完成类型转换,异常是否捕获等,是关注程序逻辑的编译阶段。之后将会生成class文件。
2、.class文件的解释执行与JIT编译
JVM加载class文件后会对代码进行优化,然后由解释器进行解释执行,执行过程中JIT编译器会对执行中的代码进行热点检测,找到经常执行的热点代码,将其编译为机器码后缓存起来,在下次调用时不需要解释执行,直接执行机器码。
HotSpot热点代码检测方式:
1、方法计数器:
每次执行方法后计数器加一,达到一定阈值后认定为是热点代码。
2、回边计数器:每个代码块被执行后(for循环、while循环等),计数器加一,达到阈值认定为是热点代码。
二、反编译
反编译即是将class文件还原成java源程序的过程,常用的反编译工具有 javap、jd、cfr等。
例:反编译查看自动拆装箱的实现
代码:
反编译结果:
可以看到Integer到int的转换通过对象的intValue()方法完成,int到Integer的转换则由Integer的静态方法valueOf()完成。通过反编译可以发现,自动拆装箱是java通过语法糖实现的。
上面就是小居数码小编今天给大家介绍的关于(java编译和反编译)的全部内容,希望可以帮助到你,想了解更多关于数码知识的问题,欢迎关注我们,并收藏,转发,分享。
94%的朋友还想知道的:
无法激活的解决办法(autocad2020安装失败错误代码1603)
按键精灵定时启动脚本的代码(脚本也能有定时功能吗)
统计工程代码总行数(怎么统计项目代码行数)
如何把本地代码上传到git教程图文(如何把本地代码上传到github)
154466
很赞哦! ()