1.编译器与解释器的区别与优劣
编译器:将完整的用户代码经过一系列处理翻译成完整的目标语言。
解释器:直接利用用户提供的输入执行源程序中的操作。因此可以逐个语句的执行源程序。
编译器产生的机器语言目标程序通常比解释器快很多,代码的优化效果也比解释器好。但是利用解释器逐句执行的特点,解释器更容易进行错误诊断,与用户的交互效果也比编译器好。
2.一个编译器的结构
一个编译器可以分为前端和后端:
- 前端包括词法分析,语法分析,语义分析,中间代码生成。
- 后端包括中间代码优化,代码生成,机器相关代码优化等。
另外在jvm中实际上是可以解释器和编译器共存的,而且大多数虚拟机都采取两者共存的形式,因为解释器方式可以快速启动运行,省去编译的时间;接着在运行的过程中,编译器逐渐把代码都编译成本地代码之后,便可以获得更高的执行效率。
3.常见编译优化技术
- 逃逸分析:如果确定一个对象不会逃出方法之外,则可以在栈上分配,随栈帧出栈而销毁,速度更快;再是标量替换,可以将一个大对象,分解成多个小变量;再是同步消除,确定某变量不会逃出线程,则直接取消其同步锁