Android技术知识Android开发经验谈Android开发

要点提炼| 理解JVM之程序编译&代码优化

2019-01-02  本文已影响22人  厘米姑娘

本篇将介绍程序编译时期的代码优化手段,分成两个阶段:


1.概述

a.由于对Java语言的编译期理解不同,可以分出几个时期:

b.Java即时编译器与C/C++静态编译器的对比


2.早期(编译期)优化

几乎所有语言都提供一些语法糖来方便开发,或能提高效率、或能提升语法的严谨性、或能减少编码出错的机会,下面是几种常见语法糖:

更多Java语法糖系列


3.晚期(运行期)优化

a.HotSpot虚拟机采用解释器与编译器并存的架构,交互情况:

解释器与编译器的交互

有上图可见,HotSpot虚拟机中内置了两个即时编译器:Client Compiler(C1编译器和)和Server Compiler(C2编译器),搭配模式:

  • 混合模式(Mixed Mode):默认采用解释器与其中一个编译器进行配合工作,虚拟机会根据自身版本与宿主机器的硬件性能自动选择运行模式和编译器,用户可以使用-client-server参数去强制指定虚拟机运行在Client模式或Server模式。
  • 解释模式(Interpreted Mode):使用参数-Xint,编译器不工作,都使用解释方式执行。
  • 编译模式(Compiled Mode):使用参数-Xcomp,优先采用编译方式执行,但解释器仍然要在编译无法进行的情况下介入执行过程。

b.HotSpot即时编译器的编译对象:热点代码

c.HotSpot即时编译器的编译过程

另外,Server Compiler的寄存器分配器是一个全局图着色分配器,能够充分利用某些处理器架构上的大寄存器集合。虽然Server Compiler的编译时间比较缓慢,但是其编译速度远超于传统的静态优化编译器,且比Client Compiler编译输出的代码质量更高,能减少本地代码的执行时间,从而抵消了额外的编译时间开销。

d.HotSpot虚拟机即时编译器在生成代码时采用的代码优化技术

其中几种最有代表性的优化技术:


上一篇下一篇

猜你喜欢

热点阅读