绩效十亿计数器

时间:2014-10-06 16:16:58

标签: java android performance

最近我开发了一个十亿计数器来测量手机的性能。

我使用以下代码来衡量数十亿。

Start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            t1 = System.currentTimeMillis();
            count = 1000000000;
            while (count != 0){
                --count;
            }

            t2 = System.currentTimeMillis();
            tf = (t2-t1)/1000;

            CountDisp.setText(""+tf);
        }
    });

使用此代码,我的手机花了大约75秒计算到10亿。

但是,当我测量从Google Play商店下载的其他应用程序的时间时,我的手机需要37秒才能达到10亿。

如何尽可能快地制作代码?

还是有另一种方式吗?

注意: - 这两个应用程序花费的时间相当于一百万,(大约)0.110秒

1 个答案:

答案 0 :(得分:2)

更快:

int count=1000000000;
while (count--!=0)
    ;

请注意,这为循环使用了不同的结构(只有一个count读取)并且它使用局部变量而不是实例字段。使用局部变量更快,因为它驻留在堆栈上的已知位置,并且只需要一个操作供JVM检索它,而对于实例字段,JVM需要查找this实例,然后在正确的字段中加载。在大多数情况下,这个额外步骤所带来的差别是微不足道的,但是你的循环是如此紧密(即,内容免费),额外的步骤是非常重要的。

你可能会用

做得更好
long count=1000000000L;

因为这可能是64位JVM。

(就其他应用程序而言,它可能正在使用JNI(本机代码),在这种情况下,你所做的一切都不会参与竞争。但我对此表示怀疑。)