.NET运行时与Java热点:.NET一代落后了吗?

Dan*_*Dan 16 .net java comparison jit jvm-hotspot

根据我可以收集的有关.NET和Java执行环境的信息,目前的情况如下:

抛开基准并且无意升级圣战,这是否意味着Java Hotspot VM比.Net领先一代.这些在Java VM中使用的技术最终是否会进入.NET运行时?

gpe*_*che 15

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

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

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

实际上,与.NET相比,Java应用程序在时间上的表现略好,在空间上表现更差.


Mat*_*ted 8

显然有人在为Rotor做类似的事情.我无法访问IEEE,因此无法阅读摘要.

.NET JIT编译器的动态重新编译和配置文件引导优化

引自摘要......

使用一组测试程序对框架进行评估表明,性能最高可提高42.3%,平均提高9%.我们的结果还表明,通过仪器收集准确的配置文件信息的开销大大超过了我们实现中配置文件引导优化的好处,这表明需要实现可以减少此类开销的技术.


The*_*ist 8

我从未对这两者进行基准比较,而且我对Sun JVM更熟悉,我只能谈论JIT.

总是需要权衡优化,并不是所有的优化都能一直运行.但是,这里有一些现代的JIT技术.如果我们坚持技术方面的话,我认为这可以成为良好对话的开始:

对于VM的良好实现,还有一些有用的功能:

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

基于这些功能以及更多功能,我们可以比较虚拟机,而不仅仅是"Java"与".NET",而是Sun的JVM与IBM的JVM与.NET与Mono的对比.

例如,Sun的JVM不进行尾部调用优化,IIRC,但IBM的确如此.