JIT (Just-In-Time -即时编译) 边运行边编译 动态编译
AOT (Ahead-Of-Time -预先编译) 运行前编译 静态编译程序在执行前被翻译为机器码
主要区别:在于是否在 “运行时” 进行编译。
边跑边优化,可以根据硬件情况、运行时信息实时编译生成最优机器指令,然后随着时间的推移得到尽可能优化的代码。
但运行时编译需要占用运行时资源,使得初始编译不能达到最高性能,甚至可能导致进程卡顿。
当程序需要支持动态链接时,只能使用JIT。
JIT编译器操作的编译线程与应用程序线程是分开的,因此应用程序不需要等待编译的执行,可以根据进程中内存的实际情况调整代码。并能够保持平台无关性。
在程序运行前编译,可以避免在运行时的编译性能消耗和内存消耗。
启动速度快,可以在程序运行初期就达到最高性能。
静态编译器牺牲了平台无关性和代码质量,因为它们不能利用程序的动态行为,不能根据程序运行情况做进一步的优化。
JIT: 优点是支持在运行时动态生成代码和类型,APP安装快。
缺点是编译时占用运行时资源,执行速度比AOT慢。
AOT: 优点是执行速度快,安全性更高。
缺点是由于AOT需要提前编译,所以APP的安装时间长。
本文章使用limfx的vscode插件快速发布