Performance of Java 1.6 vs C++?
用Java 1.6输出,我们可以说Java 1.6的性能几乎等同于C++代码,还是与C++相比,在Java中性能方面还有很多改进呢?
谢谢。
一个写得好的Java程序永远不会像一个写得好的C或C++程序那么快。虚拟机是不可减少的开销。但是,大多数代码编写得不好。
Java是一种比C++更简单的语言,它为缺乏经验的程序员提供了一个更宽容的环境——因此,如果程序员缺乏经验(而且价格低廉),那么Java可能会比C++执行得更好。
EDCOX1 0提供了一个类似的C++环境,因此对于那些缺乏经验的程序员,或者那些从Java迁移的程序员来说,它们是非常诱人的,但是它们的性能开销不如Java的垃圾收集。我见过很多C++程序,每个变量都是EDCOX1,0,它们执行得很好。
我的意见
我个人认为,大型项目需要为大部分代码选择一种"简单"的编程语言,为需要优化的部分选择一种"快速"的编程语言。Java可能是"易"语言的一个很好的选择,尤其是因为目前有大量Java程序员的存在——在未来,我认为更容易的语言,如Python将开始接管。
C++是一个"快速"语言的合理选择,如果你已经知道它,但我认为它过于复杂,最终会看到它落到路边,而C将继续履行这个角色。
Debian喜欢在这类事情上进行基准测试。在他们看来,Java的速度大约是C++的一半,消耗的内存是C的2到18倍。
你在开发什么程序?
比较C++和Java速度就像是比较螺丝刀和锤子,毫无意义。在我们生活的世界里,超级计算机和烤面包机都需要编程,你需要关注你的特殊需求。
我使用C++在嵌入式系统上运行硬实时软件。我不希望在未来的5年内,使用这个非常破碎的Java进行实时规范,那时它将有望成熟。我也不愿意用C++来访问数据库,云访问中间件应用程序(实际上我不知道我刚才说了什么,但我知道Java有利于"那种东西"。
你会用一辆没有后备箱的法拉利来移动你的物品吗?你能带一辆小型货车参加拉力赛吗?
人们必须理解,仅仅因为他们是编程语言,并不意味着他们在一个有意义的方面是可比的。
我发现Java执行得很好。
然而,为什么没有人解决我最大的抱怨?
Java使用五倍的内存作为一个C++程序做同样的工作。至少!
一旦它被使用,Java就保存它!
请,为什么没有人写一个垃圾收集器的Java使用最小数量的RAM?它可以压缩堆并将内存返回到操作系统。使用所需的内存,然后将其返回,而不是一堆荒谬的-xm*选项!
实际上,我确信一些嵌入式系统JVM可以做到这一点,但是桌面或服务器系统都不能做到这一点。
这种内存Piggsiess使Java应用程序都想表现得好像他们拥有整个计算机系统,没有人想要运行多个应用程序,RAM是免费的和无限升级的。
因此,无论性能如何,我都不会编写任何像Java中的实用程序那样的东西。只有大型服务器应用程序需要应用。
我预计大多数应用程序的大部分时间都会比Java更快。
在某些情况下,对于给定的任务,会有一些比Java慢的C++。这是非常罕见的,并且总是导致应用程序的简单化或更商业化的重构不好。
在大多数情况下,性能差异大于由灵活性、易用性、库的可用性以及Java提供的可移植性所抵消。
在很少的情况下,性能是如此的重要,以至于在爪哇的发展将是一个很差的选择。
目前,性能/易用性/易开发性折衷的最佳选择是C。不过,可移植性在这里是个大问题。
对于大多数应用程序,几乎可以肯定的是编写一个C++程序,它比Java程序的性能要好得多。
然而,如果程序没有对速度进行优化,那么Java可能会同样快或更快,因为编译器/ JIT能够优化C++环境所不能做到的。
基本上,如果你愿意花相当长的时间理解和编码性能,你可能会在爪哇做一个相当好的工作最终比你可以在美国,但同样的时间和精力的工作量,很有可能的Java将"赢"。
不过,和往常一样,算法的改进往往会产生和语言一样多的差异。
在大多数情况下,性能通常"足够好"。问题是您想要精确地比较什么,以及是否应用了探查器来查找和修复代码中的热点。
基于Sun代码的JVM仍然要支付沉重的启动税(我仍然想知道为什么他们不能快照并从那里重新启动),但Suns的方法一直是正确的第一,速度第二,而且他们花了10年才达到标准。
所以答案是"它取决于":)
不,除非你测量,否则你不能说出来。