2007-03-01
小验下BigDecimal几种构造方法的效率及其他
关键字: Java主要是想验证下不同的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大师傅";
- }
- }
- }
发表评论
- 浏览: 5768 次
- 性别:

- 来自: 重庆-宁波

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
移植Liferay4.2.2到websph ...
liferay可以部署到weblogic上,你可以联系大连Peter , MSN ...
-- by 010lead -
移植Liferay4.2.2到websph ...
关于 Liferay ,大家可以联系大连Peter,可以从他那得到足够帮助MSN ...
-- by 010lead -
移植Liferay4.2.2到websph ...
不知是否有把liferay部署到weblogic上的经验。
-- by fly_ever -
移植Liferay4.2.2到websph ...
那应该是“全局安全性”这个选项。 这个配置主要用来选择认证服务的,一般有webs ...
-- by bilo -
移植Liferay4.2.2到websph ...
楼主我用的是websphere6.0,里面的安全性配置中的安全性中没有你所写的安 ...
-- by benly






评论排行榜