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

相关推荐
张永清-老清2 分钟前
每周读书与学习->JMeter主要元件详细介绍(四)再谈取样器
学习·jmeter·性能优化·性能调优·jmeter性能测试·性能分析·每周读书与学习
weixin_307779137 分钟前
AWS Elastic Beanstalk 实现 Java 应用高可用部署指南
java·开发语言·云计算·aws·web app
我命由我1234514 分钟前
Photoshop - Photoshop 工具栏(20)混合器画笔工具
经验分享·笔记·学习·ui·职场和发展·职场发展·photoshop
萝卜白菜。22 分钟前
关于Java EE应用中xml解析类的问题
xml·java·java-ee
一米阳光zw28 分钟前
Spring Boot中使用 MDC实现请求TraceId全链路透传
java·spring boot·后端·traceid·mdc
王元_SmallA42 分钟前
pgsql:connection failed connection to server at
java·后端
高山上有一只小老虎1 小时前
购物消费打折
java·算法
tuokuac1 小时前
@Configuration类中定义的@Bean方法
java
百锦再1 小时前
第8章 模块系统
android·java·开发语言·python·ai·rust·go
hu1j1 小时前
[HTB] 靶机学习(十二)Eureka
学习·安全·web安全·网络安全·云原生·eureka