Java程序和JVM生成的exe

Java程序和JVM生成的exe,java,jvm,Java,Jvm,Java是平台独立的,因为它使用依赖于平台的JVM来启动Java程序。JVM理解字节代码并执行程序。我知道做这件事的老办法是翻译。但是现在JVM正在使用JIT。但我并不清楚JIT的概念。我认为,jVM可以将字节码转换为exe(对于Windows),然后我可以在没有jVM的情况下运行这个转换后的程序。但我可以在.NETJIT中看到生成的exe,但在Java中看不到生成的exe 我如何才能做到这一点(从Java创建本机exe文件) 与同一个C应用程序相比,JVM生成的exe的性能如何 Java将如何

Java是平台独立的,因为它使用依赖于平台的JVM来启动Java程序。JVM理解字节代码并执行程序。我知道做这件事的老办法是翻译。但是现在JVM正在使用JIT。但我并不清楚JIT的概念。我认为,jVM可以将字节码转换为exe(对于Windows),然后我可以在没有jVM的情况下运行这个转换后的程序。但我可以在.NETJIT中看到生成的exe,但在Java中看不到生成的exe

  • 我如何才能做到这一点(从Java创建本机exe文件)
  • 与同一个C应用程序相比,JVM生成的exe的性能如何
  • Java将如何处理静态链接和动态链接
  • 一些想法:

  • 您不能仅使用核心Java生成exe,JVM肯定不会这样做。它仍然在JVM中运行字节码。这里运行的实际exe是java.exe
  • 很难说exe是否会明显更快,因为JIT会生成非常快的代码
  • 如果这是您的意思,Java不会创建dll,但它可以通过JNI和JNA与格式良好的dll(不是.Net dll)交互。如果您想与.Net库交互,我认为您需要采用另一种方式,例如套接字或COM接口
  • 另一方面,确实存在从java类创建exe的程序,但大多数创建的文件仍然需要JVM,我认为不需要JVM的好文件不是免费的

  • 这样做没有多大意义
  • 有时快,有时慢
  • 不知道
  • 我认为,jVM可以将字节码转换为exe(对于Windows),然后我可以在没有jVM的情况下运行这个转换后的程序

    这是不对的

    实际上,Hotspot JIT编译器通过将各个方法编译为运行JRE中的本机代码来工作。它们通常只在被调用几次以收集典型执行路径上的统计信息之后才编译方法。Hotspot JIT编译器从未生成任何“exe”

    1) 我如何才能做到这一点(从Java创建本机exe文件)

    有第三方应用程序可以做到这一点。但是,这样做会失去JIT编译的许多优点,例如优化当前程序运行的执行模式

    2) 与同一个C应用程序相比,JVM生成的exe的性能如何

    这取决于应用程序

    3) Java将如何处理静态链接和动态链接

    Java不能处理这个问题。它取决于用于创建可执行文件的第三方应用程序


    我建议不要走这条路。如果将代码作为“.exe”文件分发非常重要,那么您可能不应该使用Java

    我如何才能做到这一点(从Java创建本机exe文件)

    有一种常见的错误观念,认为这在某种程度上会更好。然而,我还没有看到好的情况。有像Excelsior JET这样的产品可以编译二进制文件。GCC可以为Java1.4编译二进制文件,但这不是AFAIK当前的项目

    与同一个C应用程序相比,JVM生成的exe的性能如何

    你无法将两者进行比较。如果你想要一个面向对象的程序,你不能很容易地用C语言编写,而且如果不运行的话,编写的速度肯定会慢得多。如果你想写一个C风格的程序,就用C写吧

    Java将如何处理静态链接和动态链接


    JVM执行动态延迟链接。事实上,它可以在加载和卸载类加载器时多次链接和重新链接代码。

    我不确定,但我认为您无法从java创建本机代码。Java是一种解释性语言,不能用本机代码编译。@Thomas Uhrig我也认为Java是解释性语言,但为什么不在程序启动后永远使用allready解释性代码时只解释一次呢?就像编译Java是面向对象的,c是结构化的一样,我也知道这一点。但面向对象是必须的在编写源代码时,让开发软件变得容易。但生成的输出不必是面向对象的jvm代码优化可以利用这一点。