JIT & AOT


程序的两种编译方式:

JIT    (Just-In-Time -即时编译)    边运行边编译  动态编译

AOT  (Ahead-Of-Time -预先编译)  运行前编译  静态编译程序在执行前被翻译为机器码

对比

主要区别:在于是否在 “运行时” 进行编译。

JIT:

  1. 边跑边优化,可以根据硬件情况、运行时信息实时编译生成最优机器指令,然后随着时间的推移得到尽可能优化的代码。

  2. 但运行时编译需要占用运行时资源,使得初始编译不能达到最高性能,甚至可能导致进程卡顿。

  3. 当程序需要支持动态链接时,只能使用JIT。

  4. JIT编译器操作的编译线程与应用程序线程是分开的,因此应用程序不需要等待编译的执行,可以根据进程中内存的实际情况调整代码。并能够保持平台无关性。

AOT:

  1. 在程序运行前编译,可以避免在运行时的编译性能消耗和内存消耗。

  2. 启动速度快,可以在程序运行初期就达到最高性能。

  3. 静态编译器牺牲了平台无关性和代码质量,因为它们不能利用程序的动态行为,不能根据程序运行情况做进一步的优化。

重点总结:

JIT: 优点是支持在运行时动态生成代码和类型,APP安装快。
缺点是编译时占用运行时资源,执行速度比AOT慢。
AOT: 优点是执行速度快,安全性更高。
缺点是由于AOT需要提前编译,所以APP的安装时间长。


本文章使用limfx的vscode插件快速发布