码迷,mamicode.com
首页 > 编程语言 > 详细

java new 和 clone 的效率比较

时间:2017-03-07 22:59:32      阅读:4778      评论:0      收藏:0      [点我收藏+]

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

对于生成新的对象,我们常常用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

(0)
(6)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!