早期(编译期)优化

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

Javac编译器

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

解析与填充符号表

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

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

语义分析与字节码生成

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

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

Java语法糖

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有趣的django

7.python常用模块

time模块 常用表示时间方式: 时间戳,格式化的时间字符串,元组(struct_time) UTC(Coordinated Universal Time,世界...

542110
来自专栏前端杂货铺

深入seajs源码系列三

入口方法        每个程序都有个入口方法,类似于c的main函数,seajs也不例外。系列一的demo在首页使用了seajs.use(),这便是入口方法。...

28760
来自专栏李航的专栏

Shell 主要逻辑源码级分析:SHELL 运行流程 (1)

分享一下在学校的时候分析shell源码的一些收获,帮助大家了解shell的一个工作流程,从软件设计的角度,看看shell这样一个历史悠久的软件的一些设计优点和缺...

2.2K00
来自专栏纯洁的微笑

jvm系列(一):java类的加载机制

1、什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Cl...

41360
来自专栏java一日一条

细说 MySQL 之 MEM_ROOT

这篇文章会详细解说MySQL中使用非常广泛的MEM_ROOT的结构体,同时省去debug部分的信息,仅分析正常情况下,mysql中使用MEM_ROOT来做内存分...

9110
来自专栏Java技术栈

JVM运行时区域详解。

我们知道的JVM内存区域有:堆和栈,这是一种泛的分法,也是按运行时区域的一种分法,堆是所有线程共享的一块区域,而栈是线程隔离的,每个线程互不共享。 线程不共享区...

31640
来自专栏眯眯眼猫头鹰的小树杈

猫头鹰的深夜翻译:理解java的classloader

Java ClassLoader是java运行系统中一个至关重要但是经常被忽略的组件。它负责在运行时寻找并加载类文件。创建自定义的ClassLoader可以彻底...

14640
来自专栏python3

python3--模块collections,time,random,sys

有如下值集合[11,22,33,44,55,66,77,88,99,90......],将所有大于66的值保存至字典的第一个key中,小于66的值保存至第二个k...

10720
来自专栏枕边书

搭建自己的PHP框架心得(二)

续言 对于本次更新,我想说: 本框架由本人挑时间完善,而我还不是PHP大神级的人物,所以框架漏洞难免,求大神们指出。 本框架的知识点应用都会写在博客里,大家有什...

26880
来自专栏开源优测

JMeter处理器09

前言 在jmeter中提供了两种处理器,用于修改请求数据或处理响应数据。 ? 前置处理器 后置处理器 前置处理器 前置处理器是在请求发送前做相关处理。可以用于在...

32840

扫码关注云+社区

领取腾讯云代金券