论坛首页 入门技术论坛

java优化编程--读书笔记

浏览 9803 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-12-10  
wujiazhao88 写道
如果有两层以上的循环,要将多次计算的循环放在里面,少的放在外面;
另外for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高

为什么会有"for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高"这个结论呀?
我感觉两者应该效率一样的呀
0 请登录后投票
   发表时间:2009-12-10  
14. 在多重循环中,如果有可能,尽量将最长的循环放在最内层,最短的循环放在最外层,以减少循环层间的变换次数.
我试了一下,长的循环放在最内层执行用的时间比长的循环放在最外层用的时间长,有人测试过没?这个性能怎么体现呢?
0 请登录后投票
   发表时间:2009-12-10  
mooninday 写道
wujiazhao88 写道
如果有两层以上的循环,要将多次计算的循环放在里面,少的放在外面;
另外for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高

为什么会有"for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高"这个结论呀?
我感觉两者应该效率一样的呀

关于这个……刚写了帖,有兴趣的来讨论一下:降序循环总是比升序循环快?
0 请登录后投票
   发表时间:2009-12-10  
Object obj = null; 
for (int i=0;i<10000;++i) {
    obj = new Object();
}

 
for (int i=0;i<10000;++i) {
    Object obj = new Object();
}

这两种循环其实是一样的,jvm不会傻到真的在每次循环中都创建一个本地变量,那还不早stackoverflow了?
事实上本地变量都是一开始就分配好了,不管你的代码中是在哪声明的。
0 请登录后投票
   发表时间:2009-12-10  
sunshiwu1984 写道
14. 在多重循环中,如果有可能,尽量将最长的循环放在最内层,最短的循环放在最外层,以减少循环层间的变换次数.
我试了一下,长的循环放在最内层执行用的时间比长的循环放在最外层用的时间长,有人测试过没?这个性能怎么体现呢?

经常跳转是个很大的开销,如果将短的放在里边,跳转次数增加了嘛
0 请登录后投票
   发表时间:2009-12-11  
3.避免在循环体中创建对象,即使该对象点用内存空间不大.
  for(int i=0;i<10000;++i){
      Object obj = new Object();
      System.out.println("obj="+obj);
  }
  应改成
    Object obj = null;
    for(int i=0;i<10000;++i){
      obj = new Object();
      System.out.println("obj="+obj);
  }

谁能解释下这两句话的区别?
0 请登录后投票
   发表时间:2009-12-11  
幸存者 写道
Object obj = null; 
for (int i=0;i<10000;++i) {
    obj = new Object();
}

 
for (int i=0;i<10000;++i) {
    Object obj = new Object();
}

这两种循环其实是一样的,jvm不会傻到真的在每次循环中都创建一个本地变量,那还不早stackoverflow了?
事实上本地变量都是一开始就分配好了,不管你的代码中是在哪声明的。


是不一样的。执行效率上也不一样。
0 请登录后投票
   发表时间:2009-12-11  
for(int i=0;i<10000;++i){
      Object obj = new Object();
      System.out.println("obj="+obj);
  }
  应改成
    Object obj = null;
    for(int i=0;i<10000;++i){
      obj = new Object();
      System.out.println("obj="+obj);
  }

谁能解释下?
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics