语言没有速度。 Java 或 C++ 语言规范均未指定“并且程序必须编译为this高效的”。
每种语言都指定了程序必须执行的操作列表,或者至少,似乎做,在某些情况下,它对程序的效率设定了上限,但通常,聪明的编译器可以忽略单个程序中的这些规则,因为最重要的是程序的行为as if已遵循规范。函数可以内联,堆数据可以移动到堆栈等等。
程序的性能取决于三个因素:编译器、底层平台/硬件以及程序代码本身。
不是“语言”。你得到的最接近的是编译器。
任何一种语言都比另一种语言更快是有充分理由的。 C++ 做出的承诺较少,可能会减慢程序执行速度,但 Java 是 JIT 化的,这意味着它可能会利用运行时信息来优化代码,而 C++ 无法轻易做到这一点……但话又说回来,Java 中无处可寻。规范是否规定 C++ 必须not被jit'ed。就像我相信也有 Java 编译器生成本机代码而不是 JVM 字节码。
仅当您拥有正在运行的特定计算机、每种语言的特定编译器以及每种语言的程序的特定实现时,您的问题才有意义,在这种情况下,你可以运行两者来看看哪个最快.
垃圾收集是另一个很好的例子。当然,垃圾收集意味着一些开销,但它也提供了一些重要的捷径。在 Java 或 .NET 等托管语言中,堆分配非常便宜,because它受到管理和垃圾收集。在 C++ 中,它......当然是未指定的,但实际上,通常非常慢,因为操作系统必须遍历堆以在或多或少碎片化的内存空间中找到空闲内存块。哪个最快?取决于操作系统。取决于编译器。取决于源代码。
源代码也有很大的不同。如果你将一个 Java 程序天真地移植到 C++,它的性能会很糟糕。 C++ 不能很好地处理虚函数,并且通常有更好的替代方案供您使用。在 C++ 中,堆分配可能非常慢,因此,简单地重新实现 Java 程序效率极低。朝相反方向行驶时也是如此。如果直接移植到 Java,许多 C++ 习惯用法会不必要地变慢。因此,即使您已经选择了一种平台和一种编译器,您如何比较程序的性能呢?甚至为了将它交给编译器,您必须编写它的两个实现,然后它就不再是同一个程序。
然而,我认为可以公平地说,在大多数现代硬件上,使用现代 Java 编译器和现代 C++ 编译器,大多数程序都可以非常高效地实现,而且肯定足够快。但前提是您了解所使用的语言并遵守其规则。如果您尝试用 C++ 编写 Java 代码,那么 Java 将神奇地变得更加高效,反之亦然。
我想对你的问题最简洁的回答是“不。没有人可以量化 C++ 和 Java 之间的性能差异”;)