亚尔诺炽焰 2015-09-09 02:55 采纳率: 100%
浏览 1949
已采纳

关于Java与C++计算能力的比较

以相同的算法求解1-2000000之间素数的个数,为什么Java的计算速度要快于C++?
(Java SE 8 )40 milliseconds左右与C++(TDM-GCC 4.9.2 Release)180milliseconds左右
附代码

C++

 #include <iostream> 
#include <bitset>
#include <ctime>

using namespace std;

int main()
{
    const int N = 2000000;
    clock_t cstart = clock();

    bitset<N + 1> b;
    int count = 0;
    int i;
    for(i = 2; i <= N; i++)
      b.set(i);

    i = 2;
    while(i * i <= N)
    {
        if(b.test(i))
        {
            count++;
            int k = 2 * i;
            while(k <= N)
            {
                b.reset(k);
                k += i;
            }
        }
        i++;
    }

    while(i <= N)
    {
        if(b.test(i))
          count++;
        i++;
    }

    clock_t cend = clock();
    double millis = 1000.0 * (cend - cstart) / CLOCKS_PER_SEC;
    cout << count << "primes\n"
         << millis << "milliseconds\n";
    return 0;   
}

Java

import java.util.*;

public class Sieve 
{
    public static void main(String[] args)
    {
        int n = 2000000;
        long start = System.currentTimeMillis();
        BitSet b = new BitSet(n + 1);
        int count = 0;
        int i;
        for(i = 2; i <= n; i++)
            b.set(i);

        i = 2;
        while(i * i <= n)
        {
            if(b.get(i))
            {
                count++;
                int k = 2 * i;
                while(k <= n)//将所有i的倍数位置为关闭状态
                {
                    b.clear(k);
                    k += i;
                }
            }
            i++;
        }

        while(i <= n)
        {
            if(b.get(i)) count++;
            i++;
        }

        long end = System.currentTimeMillis();
        System.out.println(count + " primes");
        System.out.println((end - start) + " milliseconds");
    }
}

  • 写回答

5条回答 默认 最新

  • HeLiang7 2015-09-09 04:11
    关注

    从结果看,肯定是同等硬件条件下,JDK8对代码的优化比TDM-GCC 4.9.2要好了,使用了更优的CPU指令。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。