.NET runtime vs. Java Hotspot:.NET 是否落后一代?

2022-09-03 00:14:34

根据我在.NET和Java执行环境中收集的信息,当前的情况如下:

撇开基准测试不谈,无意升级圣战,这是否意味着Java Hotspot VM比.Net领先一代。Java VM 中使用的这些技术最终会进入 .NET 运行时吗?


答案 1

他们遵循两种不同的策略。我不认为一个比另一个好。

  • .NET 不解释字节码,因此它必须在执行时对所有内容进行 JIT,因此由于时间限制而无法进行大量优化。如果您需要在代码的某些部分进行大量优化,您可以随时手动进行NGEN,或者执行快速但不安全的实现。此外,调用本机代码很容易这里的方法似乎是让运行时足够好,并手动优化瓶颈

  • 现代JVM通常会解释大部分代码,然后对瓶颈进行优化编译。这通常比直接JIT'ing得到更好的结果,但是如果你需要更多,那么在Java中没有,并且调用本机代码并不好因此,这里的方法是尽可能多地进行自动优化,因为其他选项并不那么好unsafe

实际上,与 .NET 相比,Java 应用程序在时间上的性能往往稍好一些,在空间上的性能更差。


答案 2

我从来没有对两者进行比较,而且我对Sun JVM更熟悉,我只能笼统地谈论JIT。

优化总是存在权衡,并非所有优化都始终有效。但是,这里有一些现代JIT技术。我认为,如果我们坚持技术方面的东西,这可能是一个良好对话的开始:

就 VM 的良好实现而言,还有一些功能很有帮助:

  • 能够在GC之间进行选择
  • 每个 GC 的实现自定义
  • 堆分配参数(如增长)
  • 页面锁定

基于这些功能以及更多功能,我们可以比较VM,而不仅仅是“Java”与“.NET”,而且,例如,Sun的JVM与IBM的JVM,.NET与Mono。

例如,Sun的JVM不做尾部调用优化,IIRC,但IBM做。


推荐