深入理解Java虚拟机程序员

《深入理解Java虚拟机》读书笔记6:程序编译与代码优化

2017-03-19  本文已影响210人  ginobefun

国内JVM相关书籍NO.1,Java程序员必读。读书笔记第六部分对应原书的第十章和第十一章,主要介绍javac编译过程、HotSpot的即时编译器以及常见的编译优化技术,通过了解这部分的内容有利于我们更好的编码。

第四部分 程序编译与代码优化

第十章 早期(编译器)优化

10.1 概述

10.2 javac编译器

javac编译器本身就是一个由Java语言编写的程序,这为纯Java的程序员了解它的编译过程带来了很大的便利。

10.2.1 javac的源码与调试

javac编译过程的主体代码

10.2.2 解析与填充符号表

10.2.3 注解处理器

10.2.4 语义分析与字节码生成

10.3 Java语法糖的味道

10.3.1 泛型与类型擦除

10.3.2 自动装箱、拆箱与遍历循环

10.3.3 条件编译

10.4 实战:插入式注解处理器

@SupportedAnnotationTypes("*")
@SupportedSourceVersion(SourceVersion.RELEASE_6)
public class NameCheckProcessor extends AbstractProcessor{
    
    private NameChecker nameChecker;
    
    @Override
    public void init(ProcessingEnviroment processingEnv){
        super.init(processingEnv);
        nameChecker = new NameChecker(processingEnv);
    }
    
    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnviroment roundEnv){
        if(!roundEnv.processingOver){
            for(Element element : roundEnv.getRootElements()){
                nameChecker.checkNames(element);
            }
        }
        
        return false;
    }
    
}

10.5 本章小结

本章我们从编译器源码实现的层次上了解了javac源代码编译为字节码的过程,分析了Java语言中多种语法糖的前因后果,并实战实习了如何使用插入式注解处理器来完成一个检查程序命名规范的编译器插件。下一章我们将会介绍即时编译器的运作和优化过程。

第十一章 晚期(运行期)优化

11.1 概述

11.2 HotSpot虚拟机内的即时编译器

11.2.1 解释器与编译器

11.2.2 编译对象与触发条件

调用计数器触发的即时编译

11.2.3 编译过程

Client Compiler架构

11.2.4 查看及分析即时编译结果

编译结果

11.3 编译优化技术

11.3.1 优化技术概览

优化技术概览1
优化技术概览2

11.3.2 公共子表达式消除

11.3.3 数组边界检查消除

11.3.4 方法内联

11.3.5 逃逸分析

11.4 Java与C/C++的编译器对比

11.5 本章小结

本章我们着重了解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件以及如何从虚拟机外部观察和分析JIT编译的数据和结果,还选择了集中场景的编译期优化技术进行讲解。对Java编译器的深入了解,有助于在工作中分辨哪些代码是编译器可以帮我们处理的,哪些代码需要自己调节以便更适合编译器的优化。

系列读书笔记

扫一扫 关注我的微信公众号
上一篇 下一篇

猜你喜欢

热点阅读