为什么 leetcode 上面 Java 跑得比 C/C++ 快?

2016-07-07 15:05:55 +08:00
 xpol

如下图:

最快的居然是 Java ?为什么呢?

我猜想可能是这几个方面:

  1. 由于 GC 机制, Java 没有内存释放的时间消耗
  2. 或者 leetcode 跑 Java 代码的虚拟机一直运行着的,没有启动开销
9610 次点击
所在节点    程序员
26 条回复
dangbiao1991
2016-07-07 15:22:25 +08:00
你这只能表明本题提交的解法里, Java 代码性能大体比 C/C++ 好。
我见到的其它题目并不是这样的。
domty
2016-07-07 15:23:03 +08:00
你是怎么比较的。
以我的经验,其实和代码的质量还是有关系的。

同一个问题,我用 c 写的和 python 写的,运行时间 python 大概是 c 的 10 分之一。
大概是我写的 c 太烂了 /手动 doge
3dwelcome
2016-07-07 15:29:53 +08:00
Java 又不差的、都是 jit,cpp 没大优势。
hard2reg
2016-07-07 15:35:40 +08:00
为什么总有人喜欢比较语言之间的速度
felixzhu
2016-07-07 15:39:47 +08:00
发现讨论这个的还挺多的,估计是 leetcode 没太在意这个
https://discuss.leetcode.com/topic/14927/why-are-c-java-so-slow-different-test-cases/2
skydiver
2016-07-07 15:42:53 +08:00
不同语言的统计口径都不一样,没法比较
shyling
2016-07-07 15:44:07 +08:00
java 就是启动慢点内存占用多点,速度还行啊。。而且不容易写太差的代码。。不过 2L python 比 c 快 10 倍让我吃了一惊
Marfal
2016-07-07 15:45:26 +08:00
@hard2reg 为什么不?
BlueMeow
2016-07-07 15:47:25 +08:00
现在的 Java 本来就很快,而且有各种高度优化的库可以用
YORYOR
2016-07-07 15:55:56 +08:00
@BlueMeow leetcode 上只能用一些基本的库吧
Sorrow
2016-07-07 16:04:31 +08:00
这和 leetcode 的测试方法有关。
你可以在本地测试同样的算法, Java 几乎不可能体现出图中这么明显的差距,特别是在 C++ 开了优化的情况下。
wd85318
2016-07-07 16:06:11 +08:00
Java 是香港记者?
hpeng
2016-07-07 16:08:02 +08:00
你需要控制变量法.
BlueMeow
2016-07-07 16:19:52 +08:00
@YORYOR Java 基本类库已经是多年针对 JVM 高度优化的,速度快很正常
dynastysea
2016-07-07 16:20:04 +08:00
测试代码是啥都不知道,你要写个求 1+1=多少的代码,任何语言都有可能比 C/C++快啊
wzxjohn
2016-07-07 16:31:54 +08:00
吐槽算法的来看看这题:
https://leetcode.com/problems/add-digits/
wzxjohn
2016-07-07 16:33:15 +08:00
@dynastysea 真的假的, JVM 启动时间不算?
2225377fjs
2016-07-07 16:48:56 +08:00
如果去掉 JVM 启动时间,而且纯做运算,不涉及大量的系统调用,带 JIT 的语言运行速度跟本地编译语言并不会多大差距,反而类似于 Java 这些,因为本身有质量非常高的类库,在实现一些算法,数据结构的时候可能还会有优势。
hpeng
2016-07-07 16:55:56 +08:00
你可以省下一个 while 哦
Sorrow
2016-07-07 17:02:19 +08:00
作了一个简单的测试,你的代码在 leetcode 上运行时间大概是 40ms 左右,一份普通的 Java 代码运行时间大概是 4ms, 相差一个数量级。我在本地写了一些测试样例,用你的代码和 Java 比较, C++ 运行时间大概 20ms(不开优化), Java 大概在 35ms 左右, 是 Java 和 C++ 的正常差距。

楼上的人完全没有意识到在这个问题下其实任何测试样例都不可能让 C++ 和 Java 产生数量级的差距(如图中分布的那样, Java 和 C++ 大概相差一个数量级),所以这必然是 Leetcode 测试方法的问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/290887

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX