为什么没有更多的Java软件本地编译?

Mar*_*eon 15 java bytecode native

我意识到字节码与本机代码(可移植性)的好处.

但是说你总是知道你的代码将在x86架构上运行,为什么不编译为x86并获得性能优势呢?

请注意,我假设本机代码编译有性能提升.有些人回答说实际上可能没有收获对我来说是个新闻.

ewe*_*nli 15

因为性能提升(如果有的话)不值得麻烦.

此外,垃圾收集对性能非常重要.有可能的是,JVM的GC比嵌入在已编译的可执行文件中的更好,比如GCJ.

并且及时编译甚至可以带来更好的性能,因为JIT有更多的信息可用于优化编译,而不是编译时的编译器.请参阅JIT上的维基百科页面.

  • 第二点很重要.JIT可以产生更好的编译,因为它具有静态编译期间不可用的运行时信息. (2认同)

Gre*_*ill 11

"Solaris"是一种操作系统,而不是CPU架构.安装在实际机器上的JVM将编译为本机CPU指令.Solaris可以是SPARC,x86或x86-64体系结构.

此外,JIT编译器可以根据您拥有的实际CPU系列进行特定于处理器的优化.例如,Intel CPU上的不同指令序列比AMD CPU上的指令序列更快,并且针对您的确切平台的JIT编译器可以利用此信息来生成高度优化的代码.


bra*_*ter 7

字节码在一个Java虚拟机运行编译(例如)的Solaris.它将像该操作系统一样进行优化.

在实际情况中,您通常会在运行时看到Java代码具有相同或更好的性能,因为它构建了虚拟机的内存管理代码 - 这些代码将在不断发展和成熟多年.

构建JVM的好处不仅仅是可移植性 - 例如,每次发布新的JVM时,编译的字节码都会获得业务中最好的优化,算法改进等.另一方面,一旦你编译了C代码,那就是它.


Rev*_*nzo 5

因为使用Just-In-Time编译,所以可以获得微不足道的性能优势.

实际上,JIT实际上可以做得更快.

  • UI(Swing)开发很难正确完成,大多数程序员都不知道他们到底在做什么.Swing应用程序可能会变得非常敏感,但大多数程序员不了解Swing线程和事件系统,从而导致代码效率极低. (5认同)
  • 嗯,我不同意.请看http://reverseblade.blogspot.com/2009/02/c-versus-c-versus-java-performance.html.c#和c ++还有另一个例子.但即使在此图表中,托管和非托管之间的性能差异也达到100%. (2认同)