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

相关推荐
sz-lcw1 小时前
MySQL知识笔记
笔记·mysql·adb
古译汉书1 小时前
嵌入式铁头山羊STM32-各章节详细笔记-查阅传送门
数据结构·笔记·stm32·单片机·嵌入式硬件·个人开发
callJJ2 小时前
从 0 开始理解 Spring 的核心思想 —— IoC 和 DI(2)
java·开发语言·后端·spring·ioc·di
wangjialelele2 小时前
Linux中的线程
java·linux·jvm·c++
谷咕咕2 小时前
windows下python3,LLaMA-Factory部署以及微调大模型,ollama运行对话,开放api,java,springboot项目调用
java·windows·语言模型·llama
没有bug.的程序员2 小时前
MVCC(多版本并发控制):InnoDB 高并发的核心技术
java·大数据·数据库·mysql·mvcc
在下村刘湘3 小时前
maven pom文件中<dependencyManagement><dependencies><dependency> 三者的区别
java·maven
不务专业的程序员--阿飞4 小时前
JVM无法分配内存
java·jvm·spring boot
李昊哲小课4 小时前
Maven 完整教程
java·maven
2301_800050994 小时前
DNS 服务器
linux·运维·笔记