我的教授问我们这个问题:C#(.Net)编译器和
Java编译器技术之间有什么区别? 最佳答案 Java和C#编译器都编译为“机器代码”,用于独立于最终执行平台的中间虚拟机;分别是JVM和CLR.
JVM最初仅用于支持Java.尽管可以编译除Java之外的其他语言以在JVM上运行,但其设计的某些方面并不完全适合某些类型的语言.相比之下,CLR及其指令集从第一天开始设计,以支持一系列语言.
另一个区别在于JIT编译的工作方式.根据Wikipedia,CLR旨在运行完全编译的代码,因此(可能)CLR的JIT编译器必须在开始之前急切地编译整个应用程序. (我还认为你可以提前将字节码编译为本机代码.)相比之下,Hotspot JVM使用真正的“及时”编译.字节码方法最初由JVM使用字节码解释器执行,字节码解释器还收集有关在方法内采取的执行路径的跟踪信息.那些执行多次的方法然后由JIT编译器编译为本机代码,使用捕获的跟踪信息来帮助进行代码优化.这允许本机代码针对实际执行平台进行优化,甚至针对当前应用程序执行的行为进行优化.
当然,C#和Java语言有许多显着的差异,并且相应的编译器是不同的,因为需要处理这些语言差异.例如,C#编译器执行更多类型推理…因为C#语言更依赖于推断类型.