c# - C#(.Net) 编译器和 Java 编译器技术之间有什么区别?

标签 c# java

我的教授问了我们这个问题:C#(.Net) 编译器和 Java 编译器技术之间有什么区别?

最佳答案

Java 和 C# 编译器都编译为独立于最终执行平台的中间虚拟机的“机器代码”;分别是 JVM 和 CLR。​​

JVM 最初是专门为支持 Java 而设计的。虽然可以编译 Java 以外的语言在 JVM 上运行,但其设计的某些方面并不完全适合某些类别的语言。相比之下,CLR 及其指令集从一开始就被设计为支持多种语言。

另一个区别在于 JIT 编译的工作方式。根据Wikipedia , CLR 旨在运行完全编译的代码,因此(大概)CLR 的 JIT 编译器必须在开始之前急切地编译整个应用程序。 (我还了解到您可以提前将字节码编译为 native 代码。)相比之下,Hotspot JVM 使用真正的“即时”编译。字节码方法最初由 JVM 使用字节码解释器执行,该解释器还收集有关方法内执行路径的跟踪信息。那些被多次执行的方法然后被 JIT 编译器编译成 native 代码,使用捕获的跟踪信息来帮助代码优化。这允许针对实际执行平台甚至针对应用程序当前执行的行为优化 native 代码。

当然,C#和Java语言有很多显着差异,相应的编译器也不同,因为需要处理这些语言差异。例如,某些 C# 编译器会执行更多类型推断......因为相应的 C# 语言版本 更多地依赖于推断类型。 (请注意,Java 和 C# 语言 都随着时间的推移而发展。)

关于c# - C#(.Net) 编译器和 Java 编译器技术之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4074869/

相关文章:

c# - 是否可以在匿名函数中设置断点?

c# - 为另一个程序包装代码/类

c# - 使 BackgroundWorker 在不卡住表单的情况下按顺序执行多个操作

java - jNetPcap 与 Jpcap

java - 如何获取控制台日志远程java应用程序

java - 高级搜索 Java 库

java - 使用单个循环从数组中获取所有子数组

c# - 如果使用 out 参数,调用范围中的变量何时更改?

java - 从 XAgent 创建 Json

java - 使用java从mp4中提取图像