当前位置: 首页 > news >正文

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

相关文章:

  • 系列一、windows中安装RabbitMQ
  • 硬件面经-具身机器人通用技术要求
  • 逻辑门电路Multisim电路仿真汇总——硬件工程师笔记
  • 信息安全管理与评估2025湖北卷路由部分答案
  • pyhton基础【14】函数四
  • 爬虫001----介绍以及可能需要使用的技术栈
  • multiprocessing.pool和multiprocessing.Process
  • DeepSeek:中国AI开源先锋的技术突破与行业革新
  • Unity中的Mathf.Clamp
  • 嵌入式软件面经(一)Q: 什么是Modbus协议?它有哪些特点?
  • C++ unordered_map基础概念、对象创建、赋值操作、大小操作、数据插入、数据删除、数据修改、代码练习 1 2
  • 面试150 加油站
  • 【已解决】 数据库INSERT操作时,Column count doesn’t match value count at row 1
  • Bytemd@Bytemd/react详解(编辑器实现基础AST、插件、跨框架)
  • 算法导论第二十五章 深度学习的伦理与社会影响
  • leetcode51.N皇后:回溯算法与冲突检测的核心逻辑
  • python案例练习
  • LLMs基础学习(八)强化学习专题(5)
  • 常见的软件测试模型有哪些?各自的特点是什么?
  • Python嵌套循环
  • 前端特效网站/今日财经最新消息
  • 网站做了301怎么查看跳转前网站/如何创建自己的卡网
  • 网站建设明细价单/南京seo排名优化公司
  • 什么网站的易用性/seo外链技巧
  • 湘潭建设企业网站/优化落实疫情防控
  • 做微博网站好不好/百度网站提交入口网址