关于对JIT和AOT特性的理解
面向对象语言性能较低的原因
- 将大部分的对象使用堆来进行存储,只有少数基本类型在栈中存放,而且堆得性能低于栈。
- 很多强制类型转换(cast)或加查,耗用内存大。java运行时对类型检测,如果类型不正确会抛出ClassCastException异常。
- 自动垃圾回收机制要耗用不少内存。
- 面向对象语言是半编译语言,最终的执行代码并不是可以直接进行编译的二进制机械码。
JIT和AOT
java文件的执行流程
上述过程源代码经javac编译成字节码.class文件,后经程序字节码经过JIT环境变量进行判断,是否属于“热点代码”(消耗大部分系统资源的一小部分的代码),最后通过JIT编译为具体硬件处理器(如sparc、intel)机器码。
优点:
1.通过在运行时收集监控信息,把"热点代码"(Hot Spot Code)编译成与本地平台相关的机器码,并进行各种层次的优化;
2.可以大大提高执行效率;
缺点:
1.收集监控信息影响程序运行;
2.编译过程占用程序运行时间(如使得启动速度变慢);
3.编译机器