【问题标题】:C# vs. JAVA - What benefit is there to interpreting Java bytecode vs JITing?C# vs. JAVA - 解释 Java 字节码与 JITing 有什么好处?
【发布时间】:2015-09-18 14:27:28
【问题描述】:

我正在阅读 JAVA 和 C# 之间的 comparison 并且想知道这个声明:

注意:虽然 Java 平台支持解释字节码或 字节码被 JITed 然后本地运行,仅 .NET 平台 支持 C# 代码的本机执行,因为 IL 代码始终 运行前本地编译。

这纯粹是微软的一种营销手段,很难将 C# 部署到 Windows 以外的操作系统上,还是它提供了一些好处,例如性能或安全性?

【问题讨论】:

  • C# 不难部署到其他操作系统(它不是部署的 C#,而是编译器的 MSIL 输出),并且很容易在其他操作系统上使用单声道运行。这真的不是关于营销,而是关于性能,你越接近“金属”,程序运行得越快。无论如何,MSIL 直到运行时才进行 JIT 处理,因此它必须在其 JIT 处理为本机之前至少通过解释器运行一次。
  • 问题是倒退的。你说“Java 有一个特性,.NET 没有,.NET没有那个特性有什么引人注目的好处?”这是一个不可能回答的问题;缺少功能并没有带来好处,而是节省了成本。更好的问题是“Java 团队决定花时间和精力实现它的那个特性有什么吸引人的地方?”
  • 为了强化@RonBeyer 所说的,引用中的重点是“.NET 平台仅支持 C# 代码的本地执行,因为 IL 代码始终是本地编译的” . C#(作为一种语言)独立于该限制。
  • @Charlie 顺便说一句,你知道这是一个 14 岁的比较吗?
  • 你是在问为什么 C# 只支持 JIT 编译,而 Java 也支持解释,还是你是在问为什么 C# 完全不关心 JIT 编译,什么时候可以转而使用 AOT 编译?跨度>

标签: java c# cil


【解决方案1】:

使用及时方法,字节码在第一次执行时被翻译成本机代码。在执行前编译需要更多时间,因此第一次执行方法比第二次慢。 .Net 只编译整个程序一次。所以在第一次执行阶段被缩短了,因为编译没有延迟。 区别仅在于代码第一次执行,所以代码执行次数越多,两种方式在速度上也越接近。

【讨论】:

  • 第一次 .NET 必须编译时似乎也存在延迟,这是 AOT 的重点,所以我认为您的部分答案不正确。
  • 您的回答还帮助我发现,像 Hotspot 这样的 JVM 可以通过使用解释器使代码在第一次运行时更快地启动,随着时间的推移运行速度会变慢,但随后再次运行时可以切换优化后的编译代码见stackoverflow.com/questions/14907968/…
猜你喜欢
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多