主要是想验证下不同的BigDecimal构造器的效率.
java 代码
- package my.test.java;
- import java.math.BigDecimal;
- /**
- * 目的: 1. 测试在循环中对Object付值效率;
- * 2. BigDecimal的几个构造类型的效率;
- * 3. 关于new String();
- * 结论: 1. 在循环外生成一个变量句柄和在循环内生成一个变量的句柄,
- * 再付值,其效率相当;需要注意的是,在循环内,对象生命周期会随循环的结束而使其不可达
- 而最终被GC回收,而循环外的对象将保留最后一次结果直到方法或类执行完成。
- * 2. new BigDecimal(double d) :50
- * new BigDecimal(int d) :1
- * new BigDecimal(String d) :10
- * 这三种构造方式new BigDecimal(double d)效率最低,其
- * 效率比int类型的慢50倍,new BigDecimal(String d)比int类型慢10倍;
- * 3. String str = "XXX"比new String("XXX")快上30倍。原因在于String此处有一个
- * 关于内存的特殊分配方式及取值方式。String str = "XXX"的时候,会先查找内存中是否有相同
- 值"XXX",如果有,则将str指向"XXX",否则才会执行new String("XXX")。
- * @author mingyong
- * @date 20070301
- */
- public class TestObjInLoop {
- private final int count = 10000000;
- private final String temp = "按时大家发射点发射点法";
- private final BigDecimal tempBig = new BigDecimal(2.045);
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- TestObjInLoop TestObjInLoop = new TestObjInLoop();
- long start = System.currentTimeMillis();
- /*
- TestObjInLoop.newObj(2.045);
- System.out.println("newObj():"+(System.currentTimeMillis()-start));
- start = System.currentTimeMillis();
- TestObjInLoop.newObj(2);
- System.out.println("newObj():"+(System.currentTimeMillis()-start));
- start = System.currentTimeMillis();
- TestObjInLoop.newObj("2.0435");
- System.out.println("newObj():"+(System.currentTimeMillis()-start));
- */
- TestObjInLoop.newString();
- System.out.println("newString():"+(System.currentTimeMillis()-start));
- start = System.currentTimeMillis();
- TestObjInLoop.derectString();
- System.out.println("derectString():"+(System.currentTimeMillis()-start));
- }
- private void strIn(){
- for(int i=0;i
- //String str = this.temp;
- BigDecimal bg = tempBig;
- }
- }
- private void srtOut(){
- //String str = "";
- BigDecimal bg ;
- for(int i=0;i
- //str = this.temp;
- bg = this.tempBig;
- }
- }
- private void newObj(double num){
- for(int i=0;i
- BigDecimal bg = new BigDecimal(num);
- }
- }
- private void newObj(int num){
- for(int i=0;i
- BigDecimal bg = new BigDecimal(2);
- }
- }
- private void newObj(String num){
- for(int i=0;i
- BigDecimal bg = new BigDecimal(num);
- }
- }
- private void newString(){
- for(int i=0;i
- String bg = new String("士大夫ddddd大师傅");
- }
- }
- private void derectString(){
- for(int i=0;i
- String bg = "士大夫ddddd大师傅";
- }
- }
- }