亚尔诺炽焰 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 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器