java new 和 clone 的效率比较

本文通过实验对比了Java中new与clone操作的性能差异,结果显示对于轻量级对象new更高效,而对于构造方法中有复杂逻辑的对象,clone则更具优势。

原文地址:http://www.cnblogs.com/juson37/p/6517047.html


对于生成新的对象,我们常常用new,但是new看起来不是那么的快速,好像是个很费资源的操作,而clone看起来比new要好的多,来程序对比一下:

首先建立一个测试类,对此类进行new和clone操作,Test1.java:

public class Test1 implements Cloneable{
    String str;
    public Test1(String str){
        
        this.str=str;
    }
    public Test1 clone() throws CloneNotSupportedException{
        return (Test1)super.clone();
    }
}

主程序启动测试:分别进行10000000次new和clone,查看所用时间:

public class CloneTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        long t1=System.currentTimeMillis();
        for(int i=0;i<10000000;i++){
            Test1 s1= new Test1("test");
        }
        long t2=System.currentTimeMillis();
        Test1 s1=new Test1("test");
        for(int j=0;j<10000000;j++){
            
            Test1 s2=s1.clone();
        }
        long t3=System.currentTimeMillis();
        
        System.out.println(t2-t1);
        System.out.println(t3-t2);
    }
}

结果:

技术分享

可以看出,对于此类操作,new要比clone省时10倍左右,但是对于稍微复杂一点的对象呢?我们在Test1.java的构造方法里增加一些操作:修改后

public class Test1 implements Cloneable{
    String str;
    public Test1(String str){
        if(str.startsWith("r")){
            str="aaaaaaa";
        }
        str.replaceAll("es", "aa");
        this.str=str;
    }
    public Test1 clone() throws CloneNotSupportedException{
        return (Test1)super.clone();
    }
}

再次运行:结果:

技术分享

可以看出这里的new操作耗费了很长的时间,可以说是差距非常大,所以得出结论,对于轻量型对象,new更好,对于构造方法有些逻辑操作的对象,合理的使用clone能提升性能。

需要注意的是clone操作只是一个浅克隆,只会对克隆对象的变量值进行克隆,而不会对变量值指向的对象进行克隆,所以克隆有风险,操作需谨慎

java new 和 clone 的效率比较

标签:http   out   turn   注意   start   技术分享   test   分享   构造   

原文地址:http://www.cnblogs.com/juson37/p/6517047.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值