Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSIL可以转换为Java本机代码吗?_Java_.net_Cil_Native Code - Fatal编程技术网

MSIL可以转换为Java本机代码吗?

MSIL可以转换为Java本机代码吗?,java,.net,cil,native-code,Java,.net,Cil,Native Code,Dotnet CLR将语言代码转换为MSIL。而Java代码可以转换为独立于平台的本机代码。我们可以将此MSIL转换为本机代码吗?因此,Dotnet将自动变得独立于平台。请注意此处的术语: CLR不会将“语言代码”转换为MSIL-它会动态地将MSIL转换为本机代码 Java代码不会转换为“独立于平台的本机代码”;这是一个矛盾的说法。Java源代码被转换成独立于平台的Java字节码。JVM将字节码转换为本机代码的方式与CLR对MSIL的转换方式相同(在某种程度上) 注意,MSIL和字节码都可以

Dotnet CLR将语言代码转换为MSIL。而Java代码可以转换为独立于平台的本机代码。我们可以将此MSIL转换为本机代码吗?因此,Dotnet将自动变得独立于平台。

请注意此处的术语:

  • CLR不会将“语言代码”转换为MSIL-它会动态地将MSIL转换为本机代码
  • Java代码不会转换为“独立于平台的本机代码”;这是一个矛盾的说法。Java源代码被转换成独立于平台的Java字节码。JVM将字节码转换为本机代码的方式与CLR对MSIL的转换方式相同(在某种程度上)
注意,MSIL和字节码都可以解释;HotSpot有时进行解释,有时进行JIT编译,通常进行多次JIT编译。NET桌面CLR此时总是JIT编译一次

同样值得理解的是,字节码是唯一与平台无关的,只要您感兴趣的平台有JVM可用。MSIL也是如此。你可以在Windows上编译一个C#程序,然后在Linux上的Mono下运行它,如果你的平台有一个Mono版本,并且它没有使用Mono上没有的库


现在,关于将MSIL转换为Java字节码。。。反之更可行,因为MSIL通常比Java字节码更强大。例如,MSIL中的自定义值类型和泛型不容易转换为字节码。您可能需要更接近于用Java编写的CLR的东西。我敢说有一些聪明的可能性,但也有一些根本性的困难。即使反过来也不太容易——特别是如果Java 7引入了字节码的动态调用(而.NET中的动态键入是由DLR作为库执行的)。

我只能部分回答您的问题

是的,可以使用将MSIL转换为本机代码。但是,在这种情况下,您将无法在不同的目标体系结构上高效运行,例如32位对64位。此外,您还需要创建多个版本,每个目标平台一个


除此之外,我建议使用库尔特的答案。

这个回答可能有点离题,但值得一提。MSIL到Java的字节码可能很难,正如回答这个问题的其他人所详述的那样。但您可以在源代码级别处理从一个框架到另一个框架的转换

如果您想在.NET应用程序中使用Java库,请使用。它使用IKVMC(一种Java字节码到.NET IL转换器)将Java代码编译成.NET程序集。在你开始使用之前,一定要检查许可条款


此外,我很想知道是否可以实现相反的功能,即将NET源代码转换为Java?

此外,作为Microsoft CLR一部分的标准库中有很大一部分与Microsoft操作系统功能相关。JVM库明显更独立于操作系统。