网站首页 > 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通过语法糖实现的。
猜你喜欢
- 2024-10-01 Java培训:不同编程语言中的JIT编译
- 2024-10-01 Java 代码编译的3种方式,其中JIT最重要!
- 2024-10-01 java考试题:选择题(1-10)共15题(java选择题100道)
- 2024-10-01 Java中文编译出现错误的问题(java中文编译出现错误的问题怎么办)
- 2024-10-01 程序的编译和解释,你还知道是什么吗?
- 2024-10-01 Java虚拟机编译原理二:Java的类加载过程
- 2024-10-01 Java虚拟机编译《四》(深入浅出:java虚拟机设计与实现)
- 2024-10-01 这次我们来学习深入解析java虚拟机:C2编译器,编译流程吧
- 2024-10-01 Java带包结构命令行编译(java 包结构)
- 2024-10-01 Jenkins+Gitlab+Nginx+SonarQube+Maven编译Java项目自发布与回退
你 发表评论:
欢迎- 05-16SpringBoot整合Redis实现常用功能
- 05-16基于Redis实现简单的延时消息队列
- 05-16安装Redis
- 05-16Spring系列之Redis的两种集成方式
- 05-16Django连接Redis集群问题排查思路和总结
- 05-16只需5分钟,完成Redis所有命令操作~
- 05-16熟练使用 Redis 的 5 大数据结构:Java 实战教程
- 05-16Redis 常见业务场景及实例(Java)
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)