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

相关推荐
roman_日积跬步-终至千里1 分钟前
【Java 并发-面试】从线程基础到企业级开发的知识点概况
java·开发语言
m0_748233174 分钟前
C与C++:底层编程的六大核心共性
java·开发语言
坊钰9 分钟前
【Rabbit MQ】Rabbit MQ 介绍
java·rabbitmq
方见华Richard15 分钟前
整数阶时间重参数化:基于自适应豪斯多夫维数的偏微分方程正则化新框架
人工智能·笔记·交互·原型模式·空间计算
雀啼春17 分钟前
Java中的数据类型
java
80530单词突击赢26 分钟前
C++关联容器深度解析:set/map全攻略
java·数据结构·算法
好奇龙猫30 分钟前
【人工智能学习-AI入试相关题目练习-第十六次】
人工智能·学习
兩尛33 分钟前
c++知识点1
java·开发语言·c++
舟舟亢亢35 分钟前
JVM复习笔记——下
java·jvm·笔记