(251条消息) 【详解】JVM中,编译器和解释器的作用和区别_jvm解释器和编译器的区别_晓风残月一望关河萧索的博客-CSDN博客
6. 6. 描述javac编译器的基本结构
Javac编译器的作用是将符合Java语言规范的的源代码转换成JVM规范的Java字节码。
(1)词法分析器组件:找出规范化的Token流
(2)语法分析器组件:生成符合Java语言规范的抽象语法树
(3)语义分析器组件:将复杂的语法转化成最简单的语法,注解语法树
(4)代码生成器组件:将语法树数据结构转化成字节码数据结构
————————————————
版权声明:本文为CSDN博主「Zero_T_one_coding」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yulungggg/article/details/94855384
对比gcc编译器
gcc命令其实依次执行了四步操作:
1.预处理(Preprocessing)
2.编译(Compilation),
3.汇编(Assemble)(汇编过程将上一步的汇编代码转换成机器码,这一步产生的文件叫做目标文件,是二进制格式。)
4.链接(Linking)(链接过程使用链接器将该目标文件与其他目标文件、库文件、启动文件等链接起来生成可执行文件。附加的目标文件包括静态连接库和动态连接库。)
Java 解释器和即时解释器(JIT)之间的区别
(251条消息) Java 解释器和即时解释器(JIT)之间的区别_即时编译器和解释器_CodeDoraemon的博客-CSDN博客
区别是: 两个解释器翻译 .class (字节码文件) 的粒度和方式不同
解释器是一个逐条解释并执行字节码指令的组件,每次**只翻译一条**指令并执行,然后再翻译下一条指令。
它的翻译粒度是一条指令,而且是按需翻译,也就是只有在需要执行某条指令时才进行翻译。
因此,解释器的执行速度相对较慢。
即时编译器是将字节码文件中的整个方法编译为本地机器码的组件,它会对整个方法进行静态分析和优化,并生成最优的机器码。
它的翻译粒度是整个方法,而且是在运行时进行翻译和优化的。
因此,即时编译器的执行速度相对较快。
需要注意的是,即时编译器不是一次性将整个程序都翻译成机器码,而是按照需要逐个方法进行翻译和优化的。
当一个方法被多次调用时,即时编译器会根据实际情况对该方法进行翻译和优化,从而提高该方法的执行效率。
因此,可以将解释器和即时编译器看作是两种不同的执行模式,解释器是按需执行和翻译,即时编译器是预先翻译和优化。但两者并不是相互独立的,JVM 可以根据程序的实际情况动态地选择最优的执行模式,以提高程序的执行效率。
注:什么是本地机器码
本地机器码(Native Code)是指针对特定硬件平台和操作系统的机器语言代码,可以直接在该平台上运行。与高级语言(例如 Java)不同,本地机器码不需要经过翻译或解释,可以直接被计算机硬件执行。
java跨平台的原因 就是jvm 对同样的.class字节码可以翻译成适用于不同平台的机器码
在 Java 中,源代码被编译成字节码文件,而字节码文件需要通过解释器或即时编译器转换成本地机器码才能被执行。本地机器码的优势在于它可以直接在硬件上运行,因此执行速度相对较快,并且可以更好地利用硬件资源。缺点是它不具备跨平台特性,因为不同的平台使用的指令集是不同的,因此需要针对每个平台进行编译。
在 Java 中,即时编译器可以将字节码文件中的整个方法编译成本地机器码,从而提高程序的执行效率。但即时编译器也需要考虑不同的平台和操作系统,因此在编译过程中需要进行特定的优化和适配。
————————————————
版权声明:本文为CSDN博主「CodeDoraemon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40417070/article/details/129225192