【发布时间】:2015-10-16 06:31:56
【问题描述】:
我在这里缺少一些基本的东西。从源语言编译成字节码 (java) 或中间语言 (.NET),然后从 JVM 或 CLR 内部运行它们有什么用?
使用托管代码会降低性能(无论是轻微还是大幅度),但有什么好处?我知道有垃圾收集和内存管理,但即便如此,直接将源代码编译为本机而不需要这个中间级别不是更好吗?
另外(我在这里添加它,因为它与问题直接相关) - 显然 Windows 10 通用应用程序是使用 .NET Native 编译的,它编译为本机机器代码。我很好奇为什么以前所有的 .NET 程序都没有这样做。
【问题讨论】:
-
字节码的一大优势是无论您如何实现虚拟机都可以运行它。这在 Windows 中的范围是有限的,因为您实际上只针对少数架构(atom、x86 等)
-
.NET Native 并不是简单地“编译成机器码”,它本质上是提前 jit,所以以后不需要再 jit。这仍然会转换为与 jit 期间完全相同的机器代码;您对它的过分简化听起来就像您认为它神奇地变成了原生 c++。
-
@Krythic 我明白了。但这些不是我选择的词,我引用了我提到的链接 (.NET Native)。
-
Krythic 不正确。 .NET Native 编译器使用支持 Microsoft C++ 编译器的同一组技术。事实上,用于 .NET Native 的代码生成技术集几乎与为我们的非原生产品构建的 JIT 完全脱节。
标签: java c# jvm managed .net-native