最近看了看这方面的资料,大致了解了安卓的编译器优化,给吧友大致说说谷歌在这方面的努力。
首先是安卓5.0,引入了AOT安装时静态编译。这种方法会导致安装的时候速度慢,安装后的体积大。但有优点就是安装后代码就是编译好的,不需要运行时再编译,运行速度快。
到了安卓7.0,不再使用AOT进行安装时编译,改用JIT在运行时编译。这样的优点是安装时速度快,安装后的体积小。缺点是在第一次打开或者应用升级后打开后,会由于之前没有编译过而导致需要在运行时编译,这种边运行边编译的情况下使用,会比AOT直接编译好的慢一些。但是,JIT的编译对比AOT,会利用运行时类型信息,可以更高效地进行内联,并可让堆栈替换 (OSR) 编译成为可能。简单来说,JIT对比AOT就是能利用你的使用情况来对应用进行优化,优化后的运行结果会比AOT的编译更快。
到了安卓9.0,引入了加速文件来加速运行。对于安卓7.0的JIT优化编译,好是好,但是应用需要你使用了一段时候后,才能明显感受运行速度的提升。而且应用升级会消除之前的速度提升,需要你再次进行使用来进行优化。安卓9.0引入了优化文件来对此缺点进行了处理。通过之前用户的使用,系统会自动上传应用的高频使用代码位置,然后应用商店会根据这些上传,编译生成优化文件。之后的用户下载安装应用,就能使用这些优化文件,在第一次打开应用的时候享受到加速的效果。
对于我说的,有不对的,欢迎吧友补充。
首先是安卓5.0,引入了AOT安装时静态编译。这种方法会导致安装的时候速度慢,安装后的体积大。但有优点就是安装后代码就是编译好的,不需要运行时再编译,运行速度快。
到了安卓7.0,不再使用AOT进行安装时编译,改用JIT在运行时编译。这样的优点是安装时速度快,安装后的体积小。缺点是在第一次打开或者应用升级后打开后,会由于之前没有编译过而导致需要在运行时编译,这种边运行边编译的情况下使用,会比AOT直接编译好的慢一些。但是,JIT的编译对比AOT,会利用运行时类型信息,可以更高效地进行内联,并可让堆栈替换 (OSR) 编译成为可能。简单来说,JIT对比AOT就是能利用你的使用情况来对应用进行优化,优化后的运行结果会比AOT的编译更快。
到了安卓9.0,引入了加速文件来加速运行。对于安卓7.0的JIT优化编译,好是好,但是应用需要你使用了一段时候后,才能明显感受运行速度的提升。而且应用升级会消除之前的速度提升,需要你再次进行使用来进行优化。安卓9.0引入了优化文件来对此缺点进行了处理。通过之前用户的使用,系统会自动上传应用的高频使用代码位置,然后应用商店会根据这些上传,编译生成优化文件。之后的用户下载安装应用,就能使用这些优化文件,在第一次打开应用的时候享受到加速的效果。
对于我说的,有不对的,欢迎吧友补充。