`
bilo
  • 浏览: 17790 次
  • 性别: Icon_minigender_1
  • 来自: 江湖
最近访客 更多访客>>
社区版块
存档分类
最新评论

小验下BigDecimal几种构造方法的效率及其他

    博客分类:
  • Java
阅读更多

主要是想验证下不同的BigDecimal构造器的效率.

java 代码
  1. package my.test.java;   
  2.   
  3. import java.math.BigDecimal;   
  4. /**  
  5.  * 目的:  1.  测试在循环中对Object付值效率;  
  6.  *      2.  BigDecimal的几个构造类型的效率;  
  7.  *      3.  关于new String();  
  8.  * 结论:  1.  在循环外生成一个变量句柄和在循环内生成一个变量的句柄,  
  9.  *      再付值,其效率相当;需要注意的是,在循环内,对象生命周期会随循环的结束而使其不可达  
  10.         而最终被GC回收,而循环外的对象将保留最后一次结果直到方法或类执行完成。  
  11.  *      2.  new BigDecimal(double d)    :50  
  12.  *          new BigDecimal(int d)       :1  
  13.  *          new BigDecimal(String d)    :10  
  14.  *          这三种构造方式new BigDecimal(double d)效率最低,其  
  15.  *      效率比int类型的慢50倍,new BigDecimal(String d)比int类型慢10倍;  
  16.  *      3.  String str = "XXX"比new String("XXX")快上30倍。原因在于String此处有一个  
  17.  *      关于内存的特殊分配方式及取值方式。String str = "XXX"的时候,会先查找内存中是否有相同  
  18.         值"XXX",如果有,则将str指向"XXX",否则才会执行new String("XXX")。  
  19.  * @author mingyong  
  20.  * @date 20070301  
  21.  */  
  22. public class TestObjInLoop {   
  23.   
  24.     private final int count = 10000000;   
  25.     private final String temp = "按时大家发射点发射点法";   
  26.     private final BigDecimal tempBig = new BigDecimal(2.045);   
  27.     /**  
  28.      * @param args  
  29.      */  
  30.     public static void main(String[] args) {   
  31.         // TODO Auto-generated method stub   
  32.         TestObjInLoop TestObjInLoop = new TestObjInLoop();   
  33.         long start = System.currentTimeMillis();   
  34.         /*  
  35.         TestObjInLoop.newObj(2.045);  
  36.         System.out.println("newObj():"+(System.currentTimeMillis()-start));  
  37.         start = System.currentTimeMillis();  
  38.         TestObjInLoop.newObj(2);  
  39.         System.out.println("newObj():"+(System.currentTimeMillis()-start));  
  40.         start = System.currentTimeMillis();  
  41.         TestObjInLoop.newObj("2.0435");  
  42.         System.out.println("newObj():"+(System.currentTimeMillis()-start));  
  43.         */  
  44.         TestObjInLoop.newString();   
  45.         System.out.println("newString():"+(System.currentTimeMillis()-start));   
  46.         start = System.currentTimeMillis();   
  47.         TestObjInLoop.derectString();   
  48.         System.out.println("derectString():"+(System.currentTimeMillis()-start));   
  49.     }   
  50.     private void strIn(){          
  51.         for(int i=0;i
  52.             //String str = this.temp;   
  53.             BigDecimal bg = tempBig;    
  54.         }   
  55.     }   
  56.     private void srtOut(){         
  57.         //String str = "";   
  58.         BigDecimal bg ;   
  59.         for(int i=0;i
  60.             //str = this.temp;   
  61.             bg = this.tempBig;   
  62.         }   
  63.     }   
  64.     private void newObj(double num){   
  65.         for(int i=0;i
  66.             BigDecimal bg = new BigDecimal(num);   
  67.         }   
  68.     }   
  69.     private void newObj(int num){   
  70.         for(int i=0;i
  71.             BigDecimal bg = new BigDecimal(2);   
  72.         }   
  73.     }   
  74.     private void newObj(String num){   
  75.         for(int i=0;i
  76.             BigDecimal bg = new BigDecimal(num);   
  77.         }   
  78.     }   
  79.        
  80.     private void newString(){   
  81.         for(int i=0;i
  82.             String bg = new String("士大夫ddddd大师傅");   
  83.         }   
  84.     }   
  85.     private void derectString(){   
  86.         for(int i=0;i
  87.             String bg = "士大夫ddddd大师傅";   
  88.         }   
  89.     }   
  90. }   
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics