Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
            
                    
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过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