如何只运行1秒的java程序?

时间:2012-12-07 08:09:39

标签: java performance compiler-construction

我需要校准机器,所以我的目标是运行一个java程序大约1秒钟。所以我可以在其他机器上使用相同的程序来测量它们的运行时间并将其校准到1秒。

我知道1秒的运行时间太小,这取决于各种因素。但我想知道你们是否有任何想要分享校准的想法。

我想运行一个java程序大约一秒钟。我希望编译器对数组执行某些标准操作。我已经尝试使用数组来查找偶数和奇数。

程序输出并不重要。运行时间大约需要1秒钟。问题在于,由于1秒的数字太小,因此有时会产生波动的运行时间,例如1.25或0.678。

有没有办法强制编译器只持续1秒而不会产生大的错误值。

PS:我不想使用Thread.sleep(1000)。

现在,这是我正在使用的代码。正如我所说,我对输出和操作本身并不感到困扰。我只需要1秒的运行时间。如果您有任何想法,请帮助我。

long[] array = new long[5000000];
    int repeat = 10;
    long t1 = System.currentTimeMillis();

    for(int j = 0; j <=repeat; j++)
    {
        int even = 0, odd = 0;
        for(int i=0; i<array.length; i++)
        {
            array[i] = i;
        }

        for(int i=0; i<array.length; i++)
        {
            if(array[i] % 2 == 0)
                even++;
            else
                odd++;
        }
    }
    long t2 = System.currentTimeMillis();
    long t3 = t2 - t1;
    System.out.println(t3*10e-4+ " sec");

2 个答案:

答案 0 :(得分:2)

您好我建议您这样做。

while(!(System.currentTimeMillis() - t1&gt; = 1000)) {  ......你的程序 } System.exit(0);

答案 1 :(得分:0)

如果你真的不需要记住所有这些数字,那么对于具有algorythms技能的记录,不要使用数组。

您可以在此代码中获得相同的功能

for(int j = 0; j&lt; = repeat; j ++)

{
    int even = 0, odd = 0;
    for(int i=0; i<array.length; i++)
    {
        if(i%2 == 0){
           even++;
        }else{
            odd++;
        }
    }
}

你会发现它会运行得更快,因为你没有做太多的操作......并且你完全将for循环切断到5000000次10次

我希望这能帮助你缩短时间