摘要:本文参考自来自周志明深入理解虚拟机第版,拓展内容建议读者可以阅读下这本书。和构造方法一一对应,是同一概念在两个级别的含义收敛的操作自动保证执行父类的执行语句块初始化类变量字符串加操作替换为或的操作
本文参考自来自周志明《深入理解Java虚拟机(第2版)》,拓展内容建议读者可以阅读下这本书。
文字版如下:
编译期优化 javac的编译过程 解析和填充符号表
解析 Parse
词法分析
源代码字符流 -> 标记Token
源代码字符是程序编写的最小单位,Token是编译过程的最小元素不可再分
语法分析
Token序列 -> 抽象语法树AST
AST描述代码语法结构的树状结构,每个节点表示一个语法结构(包、类型、修饰符、运算符、接口、返回值、注释等)
填充符号表 Enter
符号表 -> 待处理列表To Do list
符号表symbol table是由一组符号地址和符号信息构成的表
包、类、方法、字段都可以抽象成一个符号(symbol),不同种类的符号之间可以有包含嵌套关系,这一阶段的任务就是识别出各类符号,并对不同种类的符号按照包含嵌套关系进行归类,并挂接到AST对应的结点上。
插入式注解处理器的注解处理使用JDK1.6后提供的插入式注解标准API来开发,这些API用于读取、修改、添加语法树的元素,运行时使用-processor参数来参与javac的编译
插入式注解处理器起编译期插件作用
在编译期间插入式注解处理器对注解进行处理,可以读取、修改、添加语法树的元素
如果处理过程中修改了语法树将会触发编译期回到填充符号表阶段重新处理一轮(Round),直到语法树不再变化
实例:lombok,在设置了相关注解后lombok会在编译期生成源代码中没有的方法等
分析与字节码生成
语义分析
标注检查
变量使用前是否已经被声明
变量与赋值之间的数据类型是否能够匹配
常量折叠
…
数据及控制流检查
程序局部变量在使用前是否有赋值
方法的每条路径是否都有返回值
是否所有的受检异常都被正确处理
final参数、final局部变量是否被修改
局部变量是否用final修饰最终在class文件中是无差别的,因为局部变量在class中是没有访问标志的,这个final不变性只在编译期检查时保证
…
解语法糖
泛型:编译后发生类型擦除,但是编译信息会保留Signature
变长参数:编译后变成数组类型的参数
自动装箱拆箱:编译后装箱通过valueOf()变成了对象,拆箱通过xxxValue()变成了原始类型值
遍历循环:编译后变成了迭代器遍历
条件编译:编译后将常量不可达条件分支直接消除掉
内部类
枚举类
断言
switch处理枚举和字符串
try定义和关闭资源
字节码生成
处理完的语法树和符号表 -> 字节码
少量的代码添加和转换工作
添加
调用父类的
执行{}语句块
初始化实例变量
(JVM自动保证执行父类的
执行static{}语句块
初始化类变量
字符串加操作替换为StringBuffer或StringBuilder的append()操作
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/76943.html
此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), 毕竟算法不是做了一遍就能完全记住的. 所以本文适合已经知道解题思路和方法, 想进一步加强理解和记忆的朋友, 并不适合第一次接触此题的朋友(可以根据题号先去力扣看看官方题解, 然后再看本文内容). 关...
摘要:三关键字能保证原子性吗并发编程艺术这本书上说保证但是在自增操作非原子操作上不保证,多线程编程核心艺术这本书说不保证。多线程访问关键字不会发生阻塞,而关键字可能会发生阻塞关键字能保证数据的可见性,但不能保证数据的原子性。 系列文章传送门: Java多线程学习(一)Java多线程入门 Java多线程学习(二)synchronized关键字(1) java多线程学习(二)synchroniz...
此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), 毕竟算法不是做了一遍就能完全记住的. 所以本文适合已经知道解题思路和方法, 想进一步加强理解和记忆的朋友, 并不适合第一次接触此题的朋友(可以根据题号先去力扣看看官方题解, 然后再看本文内容). 关...
此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), 毕竟算法不是做了一遍就能完全记住的. 所以本文适合已经知道解题思路和方法, 想进一步加强理解和记忆的朋友, 并不适合第一次接触此题的朋友(可以根据题号先去力扣看看官方题解, 然后再看本文内容). 关...
摘要:前言本文内容讲解的内容一张思维导图辅助你深入了解源码架构。总结以上内容是笔者最近学习源码时的收获与所做的笔记,本文内容大多是开源项目技术揭秘的内容,只不过是以思维导图的形式来展现,内容有省略,还加入了笔者的一点理解。1.前言 本文内容讲解的内容:一张思维导图辅助你深入了解 Vue | Vue-Router | Vuex 源码架构。 项目地址:github.com/biaochenxuy… 文...
阅读 2097·2021-11-22 15:22
阅读 1242·2021-11-11 16:54
阅读 1776·2021-09-23 11:32
阅读 2972·2021-09-22 10:02
阅读 1745·2019-08-30 12:59
阅读 1060·2019-08-29 16:27
阅读 597·2019-08-29 13:21
阅读 2446·2019-08-28 17:57