2011-12-10 55 views
4

我在编程时有点不高兴,但我想知道如果你用两种不同的编译语言编写两个相同的程序(例如java和C++)并在编译它们后运行它们,那么运行时间不同还是只是编译时间不同?速度对于不同的编译语言有不同吗? (例如Java与C++)

+1

说C++和Java是'两种编译语言'都是误导,因为C++编译为机器代码,而Java编译为虚拟机字节码,这本质上对性能有巨大的影响。 – 0x5f3759df

+2

语言没有速度。实现。这个问题主要是“JIT vs编译”,之前已经被问过很多次了。 – 2011-12-10 23:48:44

+6

为了让你开始... http://stackoverflow.com/questions/7591169/why-is-it-hard-to-beat-aot-compiler-with-a-jit-compiler-in-terms-of- app-perfor,http://stackoverflow.com/questions/7448508/java-vs-c-raytracing,http://stackoverflow.com/questions/1550910/c-and-java-performance,http:// stackoverflow。 com/questions/1517868/performance-of-java-1-6-vs-c,http://stackoverflow.com/questions/313446/can-anyone-quantify-performance-differences-between-c-and-java, http://stackoverflow.com/questions/145110/c-performance-vs-java-c – 2011-12-10 23:51:14

回答

6

解释经验法则(即时编译)比预编译慢,编译到虚拟机(如Java)比依赖于架构要慢,而且程序比OO快并且组装速度快于程序化(但您不想使用它,除非你为工业应用编程类似PIC微控制器的东西,或者你是Neo和编程绝地之间的某种混合)

无论如何,每种语言都有一些优点和缺点,还有一个很好的优化(识别瓶颈和提高这些特定点的性能)可以使您的程序运行得比任何其他粗心的执行都快,无论使用哪种语言......

+1

然而,这是经验法则与大拇指(即令人难以置信的近似和overgeneralizing)。例如,JIT编译器(如HotSpot)可以更积极地进行优化(内联间接/虚拟调用和跨动态加载的库),现在的主流C编译器可以在99%的时间内胜过大多数人类。 – delnan

+0

关于编译器不断改进,你是对的,但我仍然不知道:如果你想确保事情做得正确,你必须自己做。大多数编译器对大量应用进行优化的可能性比较大,但我没有看到自己使用gcc编译led或传感器微控制器甚至基本工业机器人手臂的程序,尽管我的技术学校的朋友告诉我他们正在教那现在... – NotGaeL

+0

@delnan:有没有人在非平凡的应用程序上测量Java比C快? (不要使用玩具C语言编译器或其他任何东西作弊。)我问,因为我听说过这种激进的优化论证很多,但我从来没有看到它在现实世界中泛滥。但是我再次看到PHP的性能优于Java,可能是因为Java代码并不是最优的(阅读:可能会被单个客户端反复点击鼠标来切换设置)。有一个教训埋在那里...... – LnxPrgr3

1

Java代码比C++慢。与任何研究一样,这些数字可能会有所不同。您通常看到20%比C/C++慢,因为它最受Java青睐。 Wikipedia compares他们在一些更详细的。

其他来源说它使用50% more memory

简而言之:Java比编译为机器代码的C,C++和其他语言要慢(与Java的bytecode相比)。

+0

对不起,我的一个链接格式不正确。它是固定的。 – FakeRainBrigand

+0

只是广泛地指出“Java代码比C++慢”肯定会受到挑战,所以我会扮演魔鬼的拥护者......看看http://en.wikipedia.org/wiki/Java_performance,引用Java字节码或提到JIT编译器。 – delnan

+0

您可以随时编辑我的答案,但我不明白它会如何更快。您链接到的维基百科页面说:“编译器无法完全优化程序,因此生成的程序比本地代码替代方案慢”。在JIT的背景下。 (我可能在我的答案中使用了错误的术语,比如字节码,如果你可以改变它,它会很好。) – FakeRainBrigand