克隆对象不一定比直接生成对象的效率高

有一个测试类Student如下:

public class Student implements Cloneable {

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

测试代码demo:

import com.example.goodforjava.entity.Student;

public class Test {

    public static void main(String[] args) throws CloneNotSupportedException {
        long startTime = System.currentTimeMillis();
        Student student = new Student();
        //克隆循环十万次
        for (int i = 0; i < 100000; i++) {
            student.clone();
        }
        long midTime = System.currentTimeMillis();
        System.out.println("克隆生成对象耗费的时间:" + (midTime - startTime) + "ms");
        //new10万次
        for (int i = 0; i < 100000; i++) {
            new Student();
        }
        System.out.println("new生成对象耗费的时间:" + (System.currentTimeMillis() - midTime) + "ms");
    }
}

运行结果如下:
在这里插入图片描述
从输出结果可以看出,同样是10万次,new生成对象的效率比克隆生成对象的效率比高了75%左右。

总结

大部分情况下使用new来生成对象是正确的决定,因为JVM对new做了相应的性能优化,不过如果构造函数的逻辑很复杂,此时通过new创建该对象会比较耗时,那么就可以尝试使用克隆来生成对象,但是使用克隆就得注意浅拷贝和深拷贝的问题了。

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/108392468