6

前几天我和一个朋友在午餐时讨论了神经网络 (NN),他声称用 Java 编写的 NN 的性能将与用 C++ 编写的相似。我知道使用“及时”编译器技术 Java 可以做得很好,但不知何故我就是不买它。有没有人有任何经验可以阐明这个问题? 这一页是我对这个主题的阅读范围。

4

7 回答 7

11

Hotspot JIT 现在可以比 C++更快地生成代码。原因是运行时经验优化。

例如,它可以看到某个循环在 99% 的时间内采用“假”分支,并相应地重新排序机器代码指令。

有很多关于这个的文章。如果您想了解所有详细信息,请阅读Sun 的优秀白皮书。有关更多非正式信息,请尝试这个

于 2008-09-15T16:50:08.633 回答
2

我会对 Hotspot JIT 和配置文件引导优化优化 C++ 之间的比较感兴趣。

我看到的热点 JIT(以及任何运行时配置文件优化的 JIT 编译器)的问题是必须保留统计信息并修改代码。虽然在个别情况下这会导致代码运行速度更快,但我怀疑在大多数情况下,配置文件优化的 JIT 编译器会比优化良好的 C 或 C++ 代码运行得更快。(当然我可能是错的。)

无论如何,通常您将受制于更大的项目,使用与编写相同的语言。或者您将受制于同事的知识库。或者您将受制于您所针对的平台(您所针对的架构上是否有可用的 JVM?)。在极少数情况下,您有完全的自由并且您熟悉两种语言,请与您可以使用的工具进行一些比较。这确实是确定什么是最好的唯一方法。

于 2008-09-15T17:01:26.253 回答
2

唯一可能的答案是:制作原型并自己测量。如果对我的经验感兴趣,Java 和 C# 对于我所做的工作来说总是比 C++ 慢得多——我相信主要是因为内存消耗高。当然,你可以得出完全不同的结论。

于 2008-09-15T17:10:38.117 回答
0

这并不是严格意义上的 C++ vs Java 性能,但在这方面仍然很有趣:一篇关于在垃圾收集环境中运行的程序性能的论文。

于 2008-09-15T17:03:15.513 回答
0

如果过多的垃圾收集是一个问题,您总是可以重用未使用的高流失对象。

创建一个工厂,在创建新对象之前使用那些回收对象的 SoftReferences 队列。然后在使用这些对象的代码中,显式地将这些对象返回给工厂进行回收。

于 2008-09-15T19:26:54.203 回答
0

可能是 C++,尽管我相信除了启动时间很慢之外,您几乎不会注意到其中的区别。然而,Java 使开发更快,维护更容易。

于 2011-06-14T17:50:04.383 回答
-1

从总体上看,您可能会争论 5% 的性能差异,通过迁移到 CUDA 或专用硬件,您将获得几个数量级的提升。

于 2009-07-19T07:13:50.073 回答