Java vs C(运行时)编辑:添加代码
我刚写了一个程序,找到所有带上限的素数。
算法:Eratosthenes筛选。
用C和Java写了两遍。 上限是666014。
出于某种原因,C给出的结果超过2.5秒,而Java在半秒内完成。
细节:
-
C中的数组是char类型
-
Java中的数组是boolean类型
C IDE:CodeBlocks
Java IDE:IntellijIdea社区版
C代码:
#include int main() { int n = 666013; int i; int k; char a[n]; for (i = 2; i <= n; i++) a[i] = 0; for (i = 2; i <= n; i++) if ( a[i] == 0 ) { printf("%d\n", i); for (k = i + i; k <= n; k += i) a[k] = 1; } return 0; }
Java代码:
package primes; public class Prime { public static void main(String[] args) { long starttime = System.nanoTime(); final int MAXN = 666013; boolean a[] = new boolean[MAXN]; for (int i = 2; i < a.length; i++) a[i] = true; for (int i = 2; i < a.length; i++) if (a[i]) { System.out.println(i); System.out.printf(""); for (int j = i + i; j < a.length; j += i) { a[j] = false; } } System.out.println(System.nanoTime() - starttime); } }
上次编辑:使用System.nanoTime() Java给出0.35秒
C算法不能更快。 Java在这里更快的原因是什么?
我敢打赌,即使您在问题标题中列出了编译时间,您实际上也会询问运行时间。 如果您正在尝试编译时间,那么它实际上是橙色的,特别是如果您在IDE中而不是使用命令行。
如果您要将Java应用程序与C ++应用程序进行比较,那么您必须考虑很多事情。
- 您应该使用相同的数据类型。
- 你必须确保你的Java代码没有触发额外的装箱。
- 您应该阅读这两种语言,并找到如何使用最准确的低级系统计时器。 例如,System.currentTimeMillis()在Java中不是很准确。
- 您应确保在将其投入输出之前测量您的时间,以便在测试中无法测量两种语言的输出差异。
- 您是否在两种语言中运行相同的架构? (32或64位)。
坦率地说,您的评估非常依赖于代码。 没有显示代码,人们无法帮助你。 即使是最简单的代码,也可以做很多很多事情来影响时序。