Java vs C(运行时)编辑:添加代码

时间:2014-09-02 18:27:28

标签: java c intellij-idea codeblocks

我刚写了一个程序,找到所有具有上限的素数。

算法:Eratosthenes的Sieve。

用C和Java写的。上限为666014。

由于某种原因,C给出的结果超过2.5秒,而Java在半秒钟内完成。

详细信息:

  • C中的数组类型为char

  • Java中的数组是boolean类型

C IDE:CodeBlocks

Java IDE:IntellijIdea社区版

C代码:

#include <stdio.h>

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在这里更快的原因是什么?

1 个答案:

答案 0 :(得分:1)

即使您在问题标题中列出了编译时间,我还打赌您实际上是在询问运行时间。如果您正在尝试编译时间,那么它实际上是橙色的,特别是如果您在IDE中而不是使用命令行。

如果您要将Java应用程序与C ++应用程序进行比较,那么您必须考虑许多事项。

  • 您应该使用相同的数据类型。
  • 您必须确保您的Java代码不会触发额外的装箱。
  • 您应该阅读这两种语言并找到如何使用最准确的低级系统计时器。例如,System.currentTimeMillis()在Java中不是很准确。
  • 您应确保在将其投入输出之前测量您的时间,以便在测试中测量两种语言的输出差异。
  • 您是否在两种语言中运行相同的架构? (32或64位)。

坦率地说,您的评估非常依赖于代码。没有显示代码,人们无法帮助您。即使是最简单的代码,也可以做很多很多事情来影响时间安排。