【学习笔记】深入理解Java虚拟机学习笔记——第10章 前端编译与优化

第10章 前端编译与优化

10.1 概述

1>前端编译器:Javac命令。 【.java文件->.class文件】

2>即时编译器:Hotspot.C1.C2 【.class文件->机器码】

3>提前编译器:JDK的Jaotc等【.java->机器码】

10.2 Javac 编译器

10.2.1 Javac的源码与调试

1>初始化插入式注解处理器

2>解析与填充符号表过程

3>插入式注解处理器,注解处理过程

4>分析与字节码生成

10.2.2 解析与填充符号表

1>词法分析、语法分析

词法:字符流=>标记

语法:标记=>抽象语法树

2>填充符号表

登记信息

10.2.3 注解处理器

lombook通过注解处理器影响了编译器的结果,在字节码中生成了代码

10.2.4 语义分析与字节码生成

1>标注检查

检查变量使用前是否已声明、数据类型匹配等

2>数据及控制流分析

局部变量赋值、方法路径等检查

3>解语法糖

方便于程序员开发的语法,如:泛型、自动装箱等都由在编译期还原为原始基础语法结构

10.3 Java语法糖的味道

10.3.1 泛型

1>Java与C#的泛型

Java:擦除式,字节码中会替换为裸类型,不可进行类型判断、创建对象及数组

c#:具现化式

2>泛型的历史背景

Java向后二进制兼容:JDK1.2的字节码能运行在1.2之后的全部JVM上

3>类型擦除

缺陷:

1.强制类型转换

2.无法使用原生类型作为泛型,不断装、开箱

3.无法获得泛型类型

List< String>与List< Integer>对于JVM来说是相同的

4>值类型与未来的泛型

10.3.2 自动装箱、拆箱、与遍历循环

10.3.3 条件编译

条件编译只能在if(常量)下成立,会自动消除无法达到的语句。

10.4 实战:插入式注解处理器

10.4.1 实战目标

10.4.2 代码实现

可以通过AbstractProcessor相关API,对抽象语法树进行修改,以重新生成词、语法并生成字节码

相关推荐
今天你TLE了吗1 分钟前
Stream流学习总结
java·学习
⑩-36 分钟前
基于Redis Lua脚本的秒杀系统
java·redis
一个平凡而乐于分享的小比特1 小时前
UCOSIII笔记(十三)CPU利用率及栈检测统计与同时等待多个内核对象
笔记·ucosiii
0和1的舞者1 小时前
《网络编程核心概念与 UDP Socket 组件深度解析》
java·开发语言·网络·计算机网络·udp·socket
稚辉君.MCA_P8_Java1 小时前
Gemini永久会员 Java动态规划
java·数据结构·leetcode·排序算法·动态规划
oioihoii1 小时前
C++语言演进之路:从“C with Classes”到现代编程基石
java·c语言·c++
N***73851 小时前
SQL锁机制
java·数据库·sql
Java天梯之路1 小时前
Java 初学者必看:接口 vs 抽象类,到底有什么区别?
java·开发语言
小熊officer2 小时前
Nginx中正向代理,反向代理,负载均衡
java·nginx·负载均衡
信码由缰2 小时前
Java 应用容器化与部署
java