Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
5年前关闭。
最近,我开发了一个十亿计数器应用程序来测量手机的性能。
我用下面的代码来衡量所用的十亿。
使用此代码,我的手机花了大约75秒钟才能计算出十亿。
但是,当我测量从另一个从Google Play商店下载的应用程序的时间时,我的手机花了37秒才算到十亿。
如何使我的代码尽可能快?
还是有另一种方法?
注意:-两个应用程序花费了相同的时间才能计数到一百万,(大约)0.110秒
请注意,这为循环使用了不同的结构(仅读取
您甚至可以做得更好
因为这很可能是64位JVM。
(就另一个应用程序而言,它可能正在使用JNI(本机代码),在这种情况下,您所做的任何事情都将无法竞争。不过,我对此表示怀疑。)
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
5年前关闭。
最近,我开发了一个十亿计数器应用程序来测量手机的性能。
我用下面的代码来衡量所用的十亿。
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秒钟才能计算出十亿。
但是,当我测量从另一个从Google Play商店下载的应用程序的时间时,我的手机花了37秒才算到十亿。
如何使我的代码尽可能快?
还是有另一种方法?
注意:-两个应用程序花费了相同的时间才能计数到一百万,(大约)0.110秒
最佳答案
更快的是:
int count=1000000000;
while (count--!=0)
;
请注意,这为循环使用了不同的结构(仅读取
count
),并且使用了局部变量而不是实例字段。使用局部变量速度更快,因为它位于堆栈上的已知位置,并且只需要执行一次操作即可让JVM检索它,而对于实例字段,JVM需要查找this
实例,然后在其中加载正确的领域。在大多数情况下,此额外步骤所造成的差异是微不足道的,但是您的循环是如此紧迫(即无内容),因此额外步骤非常重要。您甚至可以做得更好
long count=1000000000L;
因为这很可能是64位JVM。
(就另一个应用程序而言,它可能正在使用JNI(本机代码),在这种情况下,您所做的任何事情都将无法竞争。不过,我对此表示怀疑。)
08-03 18:16