最近我一直在思考原生和字节码的区别。我做了一些研究,我读到的所有信息都是关于编译成本机代码的 C++ 代码与编译成字节码的 Java 代码(在利用多核处理器的 JVM 上运行)。结论是用 Java 编写的应用程序运行得更快。
C++11 会改变这个吗?用 C++11(因为添加了线程)编写的应用程序是否比 Java 运行得更快?
结论是用 Java 编写的应用程序运行得更快。
这是一个很大的飞跃。影响系统性能的因素太多了,很难说一种方法总是比另一种更好甚至更快。
C++ 一直能够使用线程,只是没有关于如何使用线程的详细信息。我不相信 C++11 是关于性能的,而是标准化内存模型之类的东西。
恕我直言,考虑到任何时间和专家开发人员,C++ 程序总是比 Java 程序快。但是,鉴于时间有限且开发人员具有混合能力,您更有可能在 Java 中得到一些工作和表现良好的东西。您的里程会有所不同。;)
让我的答案更清楚...
C++11 会改变这个吗?
不,我不同意这种情况,也不会改变它。
用 C++11(因为添加了线程)编写的应用程序是否比 Java 运行得更快
是的,但并非总是如此,就像早期版本一样。
C++ 和 Java 都不会自动将您的程序拆分为多个线程。现代语言中最接近自动并行化的方法是使用并行集合。在 C++ 中有一些库可以做到这一点,但在功能更强大的语言中对这类东西有更好的支持,例如 Haskell、Scala、Clojure。获得自动并行化的另一种方法是使用演员库并使用演员编写整个程序。Erlang 是第一个完全支持它的语言,但用于 Scala/Java 的 Akka 框架也非常好。
我只想说All Your Java Bases Are Belong To C++.
。JVM 本身是用 C/C++ 编写的。C/C++ 在机器的裸机上以本机速度运行,而字节码由 C/C++ 代码(在金属上运行)解释。一个字节码指令可以转换为大约 5-10 个 asm 指令(或更多)。因此,C/C++ 的执行速度被认为比 Java 更快。当然,如果 Java 的运行时被抛到脑后,并且我们以机器速度解释字节码,那么这将是一个公平的比较。
也就是说,请参阅名为“Programming Pearls”一书中的一个示例,作者在 Radioshack 个人计算机上运行解释的 BASIC 程序,该程序经过充分优化,比在超级计算机上运行得更快。这意味着,程序的执行速度取决于您的算法和编码/优化实践。