【学习笔记】深入理解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,对抽象语法树进行修改,以重新生成词、语法并生成字节码

相关推荐
_院长大人_11 小时前
Java Excel导出:如何实现自定义表头与字段顺序的完全控制
java·开发语言·后端·excel
磊 子11 小时前
1.4CPU缓存一致性
java·spring cloud·缓存·系统
周末也要写八哥11 小时前
Eclipse 2024全流程网盘下载与安装配置教程详解
java·ide·eclipse
来恩100312 小时前
JSTL的标签库种类
java·开发语言
图像僧12 小时前
vs2019中的属性页使用说明
java·开发语言·jvm
武子康12 小时前
Java-03 深入浅出 MyBatis 增删改查与映射配置详解
java·后端
静心观复12 小时前
.puml文件是什么,怎么用
java
YOU OU12 小时前
SpringBoot 日志
java·开发语言
智者知已应修善业12 小时前
【51单片机LED闪烁10次数码管显示0-9】2023-12-14
c++·经验分享·笔记·算法·51单片机
Lucky_ldy12 小时前
C语言学习:文件操作
学习