博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
早期(编译期)优化
阅读量:5978 次
发布时间:2019-06-20

本文共 786 字,大约阅读时间需要 2 分钟。

  相当多新生的java语法特性,都是靠编译器的“语法糖”来实现,而不是依赖虚拟机的底层改进来支持,java中即时编译器地运行期的优化过程对于程序运行来说更重要,而前端编译器在编译期的优化过程对于程序编码来说关系更加密切。

 

Javac编译器

编译过程大致可以分为3个过程,分别是解析与填充符号表过程,插入式注解处理器的注解处理过程,分析与字节码生成过程。其步骤之间的关系与交互顺序如图所示:

解析与填充符号表

解析步骤包括词法分析和语法分析两个过程。词法分析是将源代码的字符流转变为标记(Token)集合;语法分析是根据Token序列构造抽象语法树的过程。

符号表是由一组符号地址和符号信息构成的表格。

 

语义分析与字节码生成

语义分析的主要任务是对结构上正确的源程序进行上下文有关性质的审查。语义分析过程分为标注检查以及数据及控制流分析两个步骤。标注检查步骤检查的内容包括变量使用前是否已被声明、变量与赋值之间的数据类型是否能够匹配等。数据及控制流分析是对程序上下文逻辑更进一步的验证,可检查出诸如程序局部变量是使用前是否有赋值、方法的每条路径是否都有返回值、是否所有的受查异常都被正确处理了等。编译时期的数据及控制流分析与类加载时的数据及控制流分析的目的基本上是一致的,但检验范围有所区别,有一些校验项只有在编译期或运行期才能进行的。 

字节码生成是java编译过程的最后一个阶段。字节码生成阶段不仅仅是把前面各个步骤所生成的信息转化成字节码写到磁盘中,编译器还进行了少量的代码添加和转换工作。

 

Java语法糖

语法糖虽然不会提供实质性的功能改进,但是它们或能提高效率,或能提升语法的严谨性,或能减少编码出错的机会。

泛型与类型擦除,自动装箱、拆箱与遍历循环,条件编译。

 

转载于:https://www.cnblogs.com/hthuang/p/4695326.html

你可能感兴趣的文章
PHP连接MYSQL实现简单的无限极分类
查看>>
linux开机到登陆的启动过程
查看>>
Redhat配置网卡阵列
查看>>
改写HPUX的SHELL
查看>>
我的友情链接
查看>>
项目成本管理重点
查看>>
iptables\layer7\编译内核——安装配置指南
查看>>
Android ADT下载安装
查看>>
抛却内心那一份浮躁,静下来做一些有意义的事情!
查看>>
RAID6缺两块盘数据恢复成功--戴尔(DELL ) T710服务器故障恢复
查看>>
十七周一次课
查看>>
NAS在PAT下的AAA
查看>>
《神探tcpdump第六招》-linux命令五分钟系列之四十
查看>>
netstat、ss对比使用
查看>>
我的友情链接
查看>>
这些数据科学家必备的技能,你拥有哪些?
查看>>
css div水平垂直居中
查看>>
AWK 学习笔记
查看>>
监控CPU(一)
查看>>
oracle恢复删除的数据
查看>>