Java与平台无关,因为它使用平台相关的JVM来启动Java程序。 JVM了解字节代码并执行程序。我知道做这个的旧方法是翻译。但现在JVM正在使用JIT。但我并没有清楚地理解JIT概念。我认为,jVM可以将字节代码转换为exe(对于Windows),之后我可以在没有JVM的情况下运行这个已翻译的程序。但是我可以在.net JIT中看到生成的exe,但我看不到Java中生成的exe。
答案 0 :(得分:4)
一些想法:
另外,存在从java类创建exe的程序,但是大多数创建仍然需要JVM的文件,而不是我相信的好文件不是免费的。
答案 1 :(得分:2)
答案 2 :(得分:1)
我认为,jVM可以将字节代码转换为exe(对于Windows),之后我可以运行这个没有JVM的翻译程序。
这不正确。
实际上,Hotspot JIT编译器通过将各个方法编译为正在运行的JRE中的本机代码来工作。他们通常只是在调用方法几次后才开始编译方法,以便在典型的执行路径上收集统计信息。 Hotspot JIT编译器不会产生“exe”。
1)我该怎么做(从Java创建一个本机exe文件)?
有第三方应用程序可以执行此操作。但是,通过这样做,您将失去JIT编译的许多优点,例如优化当前程序运行的执行模式。
2)JVM生成的exe与同一个C应用程序的性能是什么?
这取决于应用程序。
3)Java如何处理静态链接和动态链接?
Java无法解决此问题。它取决于您用于创建可执行文件的第三方应用程序。
我建议不要走这条路。如果将代码分发为“.exe”文件至关重要,则可能不应该使用Java。
答案 3 :(得分:0)
我该怎么做(从Java创建本机exe文件)?
有一种常见的误解,认为这在某种程度上会更好。但是,我没有看到它的好情况。像Excelsior JET这样的产品可以编译二进制文件。 GCC可以为Java 1.4编译二进制文件,但这不是当前的项目AFAIK。
JVM生成的exe与同一个C应用程序的性能如何?
你无法比较这两者。如果你想要一个面向对象的程序,你不能轻易地用C语言编写它,如果不运行它几乎肯定会慢得多。如果要编写C风格的程序,请用C语言编写。
Java如何处理静态链接和动态链接?
JVM进行动态后期链接。事实上,当您加载和卸载类加载器时,它可以多次链接和重新链接代码。