使用Java 1.6,我们可以说Java 1.6的性能几乎等同于C ++代码,或者与C ++相比,Java的性能方面还有很多需要改进的地方吗?
感谢。
答案 0 :(得分:10)
Debian likes to conduct benchmarks on this sort of thing。在他们的例子中,似乎Java的速度大约是C ++的一半,并且消耗的内存是C ++的2-18倍。
答案 1 :(得分:10)
编写良好的Java程序永远不会像编写良好的C或C ++程序那样快。虚拟机是一种不可减少的开销。 但是,大多数代码编写得不好。
Java是一种比C ++更简单的语言,为没有经验的程序员提供了一个更宽容的环境 - 所以如果你的程序员缺乏经验(并且便宜),那么Java可能会比C ++表现得更好。
shared_ptr
在C ++中提供了一个类似的宽容环境,因此它们对于没有经验的程序员或从Java迁移的程序员来说非常诱人,但是他们的性能开销与Java的垃圾收集一样糟糕或差。我见过大型C ++程序,其中每个变量都是shared_ptr
,并且它们的表现非常糟糕。
我的意见
就我个人而言,我认为大型项目需要为大部分代码选择“简单”的编程语言,而对于需要优化的部分则需要“快速”编程语言。 Java可能是“简单”语言的一个很好的选择,特别是因为目前有大量的Java程序员 - 在未来,我认为甚至更容易的语言如Python将开始接管。
如果您已经了解C ++,那么C ++是一种“快速”语言的合理选择,但我认为它过于复杂,最终会看到它被淘汰,而C将继续履行这一角色。答案 2 :(得分:1)
我希望大多数应用程序C ++的大部分时间都比Java快。
在某些情况下,某些C ++会比给定任务的Java慢。这是非常罕见的,并且总是导致应用程序执行不佳或者应用程序的重构更加糟糕。
在大多数情况下,性能差异大大抵消了Java提供的灵活性,易用性,库的可用性以及可移植性。
在极少数情况下,性能如此重要以至于在Java中开发将是一个糟糕的选择< views>< flame off>在这些情况下,普通C通常是比C ++更好的选择< / flame>< /看来>
目前,性能/易用性/易于开发权衡的甜点是C#。虽然便携性是一个很大的问题。
答案 3 :(得分:1)
我发现Java表现非常好。
然而,为什么没有人能解决我最大的抱怨?
Java使用五次作为执行相同工作的C ++程序的内存。至少!
一旦使用它, Java保持!
拜托,请问为什么没有人为使用最少量RAM的Java编写垃圾收集器?它可以压缩堆并将内存返回给操作系统。而不是荒谬的成堆-Xm *选项,使用所需的内存,然后将其还原!
实际上我确信某些嵌入式系统JVM会这样做,但桌面或服务器系统都没有。
这种内存贪婪使Java应用程序都希望表现得好像拥有整个计算机系统一样,没有人想要运行多个应用程序,并且RAM是免费且无限可升级的。
因此,无论性能如何出色,我都不会像Java中的实用程序那样编写任何内容。只需要申请巨大的服务器应用程序。
答案 4 :(得分:1)
你在开发什么课程?
将C ++与Java速度进行比较就像比较螺丝刀和锤子一样,毫无意义。在我们生活的世界里,超级计算机和烤面包机都需要编程,你需要专注于你的特定需求。
我将C ++用于在嵌入式系统上运行的硬实时软件。我不会梦想在至少再过5年的时间里使用非常破碎的Java实时规范,希望它有望成熟。我同样不愿意将C ++用于数据库,云访问中间件应用程序(实际上我不知道我刚刚说过什么,但我知道Java对于那种东西很有用)
你会使用没有行李箱空间的法拉利来移动你的物品吗?你会带一辆小型货车去参加比赛吗?
人们必须明白,仅仅因为它们是编程语言,并不意味着它们具有可比性。
答案 5 :(得分:0)
没有。除非你测量它,否则你可能不会说出来。
答案 6 :(得分:0)
对于大多数用途,性能通常“足够好”。问题是您想要准确比较什么,以及您是否已应用分析器来查找和修复代码中的热点。
基于Sun的代码的JVM仍然支付了大量的启动税(我仍然想知道为什么他们不能快照并从那里重新启动)但是太阳的方法首先是正确的,速度第二,并且花了他们10年的时间来达到参数所以答案是“它取决于”:)
答案 7 :(得分:0)
对于大多数应用程序来说,几乎可以肯定编写一个C ++程序,它比java程序在程序中表现要好得多。
但是如果程序没有针对速度进行优化,那么java可能会同样快或者更快,因为编译器/ JIT能够进行C ++环境所不能的优化。
基本上,如果你愿意花费大量时间来理解和编写性能,你最终可能会比在java中做得更好,但是在相同的时间和精力下,java很可能“取胜”。
与往常一样,算法的改进往往会产生与语言不同的差别。