Java 与 C(运行时)编辑 : Added Code

标签 java c intellij-idea codeblocks

关闭。这个问题需要details or clarity .它目前不接受答案。












想改进这个问题?通过 editing this post 添加详细信息并澄清问题.

7年前关闭。




Improve this question




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

算法:埃拉托色尼筛法。

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

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

详情:

  • C 中的数组类型为 char
  • Java 中的数组是 boolean 类型

  • C IDE:代码块

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

    最佳答案

    我敢打赌,即使您在问题标题中列出了编译时间,您实际上也是在询问运行时间。如果您尝试对编译进行计时,那么它真的很适合橘子,特别是如果您在 IDE 中而不是使用命令行进行编译。

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

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

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

    关于Java 与 C(运行时)编辑 : Added Code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25629921/

    相关文章:

    c - 如何执行逐行崩溃调试来处理 c 中的 "has stopped working"错误?

    kotlin - 如何在 IntelliJ 中导入 Kotlin 库

    java - servlet 中的登录问题

    java - HttpURLConnection:如何读取 400 响应的有效负载

    C 客户端/服务器与 fprintf 通信?

    maven - 在 IntelliJ maven-war-plugin 中配置 webXml

    python - 使用条件断点进行 IntelliJ/PyCharm 调试 : Function parameter not defined

    java - 修复 java 按键操作中的延迟问题

    java - 使用 Jersey 1.x 自定义注解注入(inject)

    c - 在这种情况下,循环顺序如何影响 C 中的位操作?