最近我开发了一个十亿计数器来测量手机的性能。
我使用以下代码来衡量数十亿。
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秒
答案 0 :(得分:2)
更快:
int count=1000000000;
while (count--!=0)
;
请注意,这为循环使用了不同的结构(只有一个count
读取)并且它使用局部变量而不是实例字段。使用局部变量更快,因为它驻留在堆栈上的已知位置,并且只需要一个操作供JVM检索它,而对于实例字段,JVM需要查找this
实例,然后在正确的字段中加载。在大多数情况下,这个额外步骤所带来的差别是微不足道的,但是你的循环是如此紧密(即,内容免费),额外的步骤是非常重要的。
你可能会用
做得更好long count=1000000000L;
因为这可能是64位JVM。
(就其他应用程序而言,它可能正在使用JNI(本机代码),在这种情况下,你所做的一切都不会参与竞争。但我对此表示怀疑。)