Java应用程序是否可能比用C++编写的程序更快?另外,编译中的发布模式是什么?
与这里的一些人不同,我会合情合理地回答我知道OP打算提出的问题,即使他的陈述可能会更好.
是的,一个典型的 Java实现可以比更快典型的C++实现现实世界的东西.尽管Java在安全的虚拟机语言方面有一些障碍,但它也弥补了其中的一部分.
首先,由于Java具有非常抽象的内存管理方案,不允许操作原始指针或无类型内存块,因此它可以使用移动垃圾收集器.在C++中,无类型的内存区域,联合等会破坏这一点.因此,当不需要运行GC时,Java中的分配可能只是一个指针凹凸.在C++中没有实际的方法可以做到这一点,因为完全移动的GC不能用支持C++所做的低级操作的语言来实现.
此外,相对于静态编译的典型C++实现,典型Java实现的VM是一把双刃剑.VM具有一些固有的开销,但也允许一些额外的优化.例如,假设您有某种虚函数(请原谅不正确的语法,因为我不经常使用Java):
abstract class Foo { void stuff() {} } class Foo1 extends Foo { void stuff() { System.out.println("Foo1"); } } class Foo2 extends Foo { void stuff() { System.out.println("Foo2"); } } // Somewhere in program initialization: Foo foo; if(args[0] == "Foo1") foo = new Foo1(); else foo = new Foo2; for(int i = 0; i < 1000000; i++) foo.stuff();
在C++中,foo.stuff()上的虚函数调用可能必须在所有1,000,000次迭代中执行.在Java中,VM可能能够在运行时通过直接调用替换它,之后意识到foo没有语法合法的方式被反弹到类Foo2的对象.
语言没有速度.一个好的Java编译器可能会生成比错误的C++编译器更高效的代码,反之亦然.哪一个"最快"?
执行速度取决于几个因素:
编译器.不同的编译器从同一输入生成不同的输出代码.
你的源代码.有些操作在一种语言中便宜,但在其他语言中则很昂贵.使用'new'分配内存在C++中比在C#或Java等托管语言中慢得多,例如)
它正在运行的系统.(CPU在他们如何能够快速执行不同的代码会有所不同.如果你的Java编译器原来生成,运行非常好上了Core 2的代码,但我的C++编译器生成一个飞鸿运行良好?哪个是最快的,然后代码?
但这种语言原则上是无关紧要的.每种语言都强制执行某些保证,这可能会阻止某些优化.但是,一个聪明的编译器可以确定这些保证可以在这种特殊情况下可以安全地绕过,使得优化反正.(例如,Java编译器通常会尝试消除语言所需的边界检查).所以,这取决于你正在测试(移植到C++ Java代码可能会运行在Java版本,反之亦然更好),以及你如何编译它,你运行它的代码.
正如马丁约克所说,这是一个愚蠢的问题.这是不可能回答的. 当然,在某些情况下,Java可能比C++更快.例如,如果您编写非常好的Java代码和非常糟糕的C++代码.或者如果您使用糟糕的C++编译器.或者,如果其他任何一百件事情都恰好有利于Java版本.
跟我说:语言没有速度.
哪个最快?英语还是法语?两者都只是将意义与声音联系在一起的方式,或者是纸上的曲折.
这同样适用于编程语言.编程语言只是将语义与一个或多个文件中的字符序列相关联的一种方式.
我认为你可以浏览很多类似的问题.看看这里,例如:C++性能与Java/C#