-
内容大纲
本书作者是阿里静态编译研究团队的核心成员,曾任华为高级工程师,一直从事静态编译技术的研究与落地。本书得到业界多位知名专家的鼎力推荐,是深度、系统研究Java静态编译技术的鲜见资料。阅读本书,读者可以了解Java静态编译技术的特点、实现机制、优缺点等,以将其应用到自己的业务实践中。
本书分为三部分,具体内容如下。
第一部分(第1~4章)首先概要介绍Java编译器的演进过程,然后介绍Java静态编译的基本原理、总体能力和发展前景,主要向读者说明Java静态编译技术是什么、业界主流实现方案、GraalVM结构及静态编译应用的流程。
第二部分(第5~12章)详细介绍GraalVM如何实现Java的静态编译,着重介绍如何支持现有Java特性,涵盖静态编译的总体流程、重要机制(扩展、替换、类提前初始化优化机制)、动态特性(反射和序列化)实现、跨语言编程能力等。读者可以掌握GraalVM对Java静态编译技术的具体实现原理,了解动态的Java特性是如何被静态化支持的,洞悉静态编译本质。
第三部分(第13~15章)主要关注GraalVM的实践应用,介绍如何将传统Java应用编译为二进制可执行文件或静态库文件并部署上云,以及与传统的Java程序完全不同的编译调试技术。读者可以获悉静态编译实践中常见问题的解决方案,以更快拥有静态编译技术的应用实践能力。 -
作者介绍
林子熠,博士,阿里巴巴集团技术专家,曾任华为技术有限公司高级软件开发工程师。专注于Java静态编译方向,主要负责Java静态编译技术在阿里巴巴生态中的应用,并以落地实践中发现的问题为切入点,向GraalVM社区贡献了多项重要特性,是GraalVM社区建设的积极参与者;曾作为核心人员,负责将华为方舟编译器前端的Java字节码和ArtDex字节码转换为方舟中间语言的开发工作;曾受邀作为上海JUG2019报告嘉宾和北京QCon2020报告嘉宾,介绍GraalVM静态编译技术;曾在编译器领域国际顶级学术会议CGO 2021的Graal专项论坛中报告对Java序列化特性的静态编译支持实现。 -
目录
序
前言
第一部分 从解释执行到静态编译:Java的编译发展之路
第1章 Java静态编译技术的诞生
1.1 Java程序的运行生命周期
1.1.1 初始化
1.1.2 程序预热
1.2 冷启动问题
1.3 初识Java静态编译技术
1.3.1 什么是Java静态编译
1.3.2 静态编译的优势
1.3.3 静态编译的局限性
1.4 小结
第2章 Java静态编译的业界实现
2.1 Oracle GraalVM
2.1.1 GraalVM是什么
2.1.2 GraalVM静态编译优点
2.1.3 GraalVM静态编译缺点
2.1.4 GraalVM发展分析
2.2 华为方舟编译器
2.3 小结
第3章 GraalVM整体结构
3.1 子项目与组件
3.2 GraalVM编译系统工具mx
3.3 在IDE中打开GraalVM
3.4 小结
第4章 从Java程序到本地代码:静态编译应用流程
4.1 获取GraalVM JDK
4.1.1 下载发布版
4.1.2 下载Docker镜像
4.2 从源码编译
4.2.1 编译准备
4.2.2 编译
4.3 获取依赖库
4.4 预执行目标应用程序
4.5 静态编译目标应用程序
4.5.1 命令行模式编译
4.5.2 配置文件模式
4.5.3 Maven插件模式
4.5.4 Gradle插件模式
4.6 静态编译Java程序实例
4.6.1 静态编译HelloWorld
4.6.2 静态编译Spring Boot应用实例
4.7 小结
第二部分 静态编译实现原理
第5章 Substrate VM静态编译框架
5.1 静态编译启动器
5.2 静态编译实现流程
5.2.1 类载入
5.2.2 准备
5.2.3 静态分析
5.2.4 全局构建
5.2.5 编译
5.2.6 生成image
5.2.7 写文件
5.3 Substrate VM运行时支持
5.3.1 内存管理
5.3.2 系统信号处理机制
5.4 小结
第6章 Feature机制
6.1 Feature机制概览
6.2 Feature管理
6.2.1 注册与调用Feature
6.2.2 Feature依赖
6.3 Feature影响编译流程
6.3.1 Feature函数的入参回调
6.3.2 访问ImageSingletons单例库
6.4 GraalFeature实现静态编译优化
6.4.1 GraalVM编译器基础知识
6.4.2 扩展lowering
6.4.3 注册图的扩展插件
6.5 Feature接口函数
6.6 小结
第7章 编译时替换机制
7.1 替换机制在Substrate VM中的应用
7.2 基于注解的替换
7.2.1 替换类
7.2.2 替换枚举类型
7.2.3 替换函数
7.2.4 替换构造函数
7.2.5 替换类中的域
7.2.6 替换类的静态初始化函数
7.3 实现原理
7.3.1 替换机制责任链
7.3.2 确定待替换元素集合
7.3.3 自定义替换内容
7.4 小结
第8章 类提前初始化优化
8.1 Java中的类初始化
8.2 编译时的类初始化
8.2.1 类提前初始化的性能分析
8.2.2 类提前初始化的安全性分析
8.3 优化实现原理
8.3.1 早期阶段分析
8.3.2 中期阶段分析
8.3.3 后期阶段分析
8.4 手动设置类初始化时机
8.5 小结
第9章 反射的实现与优化
9.1 反射在传统Java中的实现
9.2 基于配置的支持
9.2.1 反射配置文件
9.2.2 配置局限性
9.3 Substrate VM的反射实现
9.3.1 解析配置并注册反射信息
9.3.2 反射函数常量折叠优化
9.3.3 函数反射调用过程优化
9.4 其他类似动态特性的支持
9.4.1 JNI调用
9.4.2 动态代理
9.4.3 资源访问
9.4.4 序列化特性
9.5 小结
第10章 序列化
10.1 序列化特性的JDK原生实现
10.1.1 序列化/反序列化基本流程
10.1.2 序列化中的静态编译不友好特性
10.2 静态编译的序列化实现
10.2.1 解决动态类加载问题
10.2.2 解决new抽象类问题
10.2.3 静态初始化函数检查
10.3 局限性
10.4 小结
第11章 跨语言编程:用Java语言编写共享库
11.1 样例项目cinterfacetutorial
11.2 共享库的Java实现源码解析
11.2.1 声明共享库上下文
11.2.2 实现C基本数据结构
11.2.3 实现C的结构体继承
11.2.4 暴露共享库API
11.2.5 直接调用C函数
11.2.6 共享库函数的返回值
11.3 静态编译JNI共享库
11.3.1 JNIDemo项目组织结构
11.3.2 JNI库API函数的声明
11.3.3 JNI函数编程基本过程
11.3.4 JNI函数参数传入String
11.3.5 自定义JNI函数指针类型
11.3.6 调用Java函数
11.4 小结
第12章 CLibrary机制
12.1 isolate
12.1.1 错误的多线程调用:简单复用isolate
12.1.2 正确的多线程调用:为每个线程新建isolate
12.1.3 正确的多线程调用:映射线程与isolate
12.2 WordBase接口系统
12.3 注解系统
12.3.1 @CContext注解
12.3.2 @CEntryPoint注解
12.3.3 @InvokeCFunctionPointer注解
12.4 正确释放内存
12.5 小结
第三部分 静态编译实战
第13章 静态编译Serverless应用到阿里云函数计算平台
13.1 阿里云函数计算平台
13.2 静态编译基于Micronaut的Spring-Boot示例项目
13.3 部署到阿里云
13.4 性能比较
13.5 小结
第14章 native-image-agent的实现
14.1 native-image-agent与JVMTI
14.2 实现静态编译的JVMTI Agent
14.3 native-image-agent的可用选项
14.4 小结
第15章 调试
15.1 编译debug版本的native image
15.2 使用GDB调试native image
15.2.1 启动GDB
15.2.2 增加函数断点
15.2.3 GDB TUI分屏界面
15.2.4 单步调试
15.2.5 查看Java对象的值
15.3 小结
同类热销排行榜
- C语言与程序设计教程(高等学校计算机类十二五规划教材)16
- 电机与拖动基础(教育部高等学校自动化专业教学指导分委员会规划工程应用型自动化专业系列教材)13.48
- 传感器与检测技术(第2版高职高专电子信息类系列教材)13.6
- ASP.NET项目开发实战(高职高专计算机项目任务驱动模式教材)15.2
- Access数据库实用教程(第2版十二五职业教育国家规划教材)14.72
- 信号与系统(第3版下普通高等教育九五国家级重点教材)15.08
- 电气控制与PLC(普通高等教育十二五电气信息类规划教材)17.2
- 数字电子技术基础(第2版)17.36
- VB程序设计及应用(第3版十二五职业教育国家规划教材)14.32
- Java Web从入门到精通(附光盘)/软件开发视频大讲堂27.92
推荐书目
-
孩子你慢慢来/人生三书 华人世界率性犀利的一枝笔,龙应台独家授权《孩子你慢慢来》20周年经典新版。她的《...
-
时间简史(插图版) 相对论、黑洞、弯曲空间……这些词给我们的感觉是艰深、晦涩、难以理解而且与我们的...
-
本质(精) 改革开放40年,恰如一部四部曲的年代大戏。技术突变、产品迭代、产业升级、资本对接...