以下引用自我前几天写的一篇简介 继续谈谈下一代Android VM runtime: ART
ART是一个AOT编译器。所谓AOT (Ahead of Time)是指在运行以前就把中间代码静态编译成本地代码,而JIT (Just inTime)则是在运行时动态编译。
AOT和JIT比各有长处,这里不详细展开,只简单列举几个最主要的:
- AOT的主要编译过程发生于开发用机,因此编译得慢一点没关系,可以充分的做各种耗时的优化;JIT在运行时动态编译,通常不能做太耗时的优化,否则影响启动和运行速度
- 更具体一点,以Sun的JVM为例,JIT大体上划分为client和server两种模式。Client模式下VM是一边解释执行,一边识别热点区域进行JIT编译,以免明显影响启动速度;考虑到内存占用,也不会把所有Java字节码都编译成本地代码。Server模式下则会进行全面的JIT编译,因为server启动慢一点没关系,一旦跑起来就会运行很长时间,所以花一点点时间全面优化是值得的。
如果ART确实是用AOT compiler替换JIT,性能先不谈,Android的内存占用应该会因此获益。现在dex代码经过 dex => optimized dex => JIT cache这个过程,内存中需要同时容纳odex和JIT cache两份代码;换成ART以后,就变成dex => oat,内存里只放oat就可以。不过考虑到ART的解释器代码里有提到deoptimization,也有可能在特定情况下还需要load dex代码解释执行。重要的是oat应该是可以直接mmap执行的代码(其实就是一个真·ELF格式的文件),加载/换页重加载的速度都会比从odex动态编译来得快。
— 完 —
本文作者:rlei
【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)
此问题还有 5 个回答,查看全部。
延伸阅读:
kitsch 是什么意思,有哪些内涵?哪些东西是 kitsch 的外延?
眉毛在美学角度上有哪些作用?