关于对JIT和AOT特性的理解
面向对象语言性能较低的原因
- 将大部分的对象使用堆来进行存储,只有少数基本类型在栈中存放,而且堆得性能低于栈。
- 很多强制类型转换(cast)或加查,耗用内存大。java运行时对类型检测,如果类型不正确会抛出ClassCastException异常。
- 自动垃圾回收机制要耗用不少内存。
- 面向对象语言是半编译语言,最终的执行代码并不是可以直接进行编译的二进制机械码。
JIT和AOT
java文件的执行流程

上述过程源代码经javac编译成字节码.class文件,后经程序字节码经过JIT环境变量进行判断,是否属于“热点代码”(消耗大部分系统资源的一小部分的代码),最后通过JIT编译为具体硬件处理器(如sparc、intel)机器码。
优点:
1.通过在运行时收集监控信息,把"热点代码"(Hot Spot Code)编译成与本地平台相关的机器码,并进行各种层次的优化;
2.可以大大提高执行效率;
缺点:
1.收集监控信息影响程序运行;
2.编译过程占用程序运行时间(如使得启动速度变慢);
3.编译机器码占用内存;
JIT(运行时动态编译)
JIT(Just-in-time)即“即时编译”,指的是一句一句边翻译边运行,不产生目标程序。它将源语言(如BASIC和java得到的class字节码文件)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。就像外语 翻译中的“口译”一样,说一句翻一

本文探讨了面向对象语言性能低下的原因,重点解析了JIT(运行时动态编译)和AOT(静态编译)的特性。JIT在运行时收集监控信息,编译热点代码以提高执行效率,但可能影响启动速度和占用内存。AOT则在程序运行前完成全部编译,牺牲了平台无关性,但能显著提升性能。

3092

被折叠的 条评论
为什么被折叠?



