深刻理解Java虚拟机读书笔记-第11章 后端编译与优化

第11章 后端编译与优化

11.1概述

前面一章讲的是从*.java到*.class的过程,即源码到字节码的过程。 这一章讲的是从二进制字节码到目标机器码的过程,分为两种即时编译器和提早编译器。java

11.2 即时编译器

目前主流的两款商用Java虚拟机(HotSpot、OpenJ9)里,Java程序最初都是经过解释器 (Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁,就会把这些代码认 定为“热点代码”(Hot Spot Code),为了提升热点代码的执行效率,在运行时,虚拟机将会把这些代 码编译成本地机器码,并以各类手段尽量地进行代码优化,运行时完成这个任务的后端编译器被称 为即时编译器。后端

11.3 提早编译器

  • 即时编译消耗的时间都是本来可用于程序运行的时间,消耗的运算资源都是本来可用

于程序运行的资源,缓存

  • 给即时编译器作缓存加速,去改善Java程序的启动时间,以

及须要一段时间预热后才能到达最高性能的问题。这种提早编译被称为动态提早编译(Dynamic AOT)或者索性就大大方方地直接叫即时编译缓存(JIT Caching)markdown

Android虚拟机历程: Android4.4以前 Dalvik虚拟机 即便编译器 Android4.4开始 Art虚拟机 提早编译器,致使安装时须要编译App,很是耗时,但运行性能获得提高 Android7.0开始 从新启用解释执行和即时编译,系统空闲时间时自动进行提早编译。性能

11.3 编译器优化技术

优化