lfe*_*z93 8 java performance clone cloneable
我试图理解java中clone()方法下面发生了什么,我想知道如何做一个新的调用
public class Person implements Cloneable {
private String firstName;
private int id;
private String lastName;
//constructors, getters and setters
@Override
protected Object clone() throws CloneNotSupportedException {
Person p = (Person) super.clone();
return p;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的克隆代码我想知道底下发生了什么,以及新呼叫之间有什么区别因为.
这是我的客户端代码
Person p = new Person("John", 1, "Doe");
Person p2 = null;
try {
p2 = (Person) p.clone();
} catch (CloneNotSupportedException ex) {
Logger.getLogger(clientPrototype.class.getName()).log(Level.SEVERE, null, ex);
}
p2.setFirstName("Jesus");
System.out.println(p);
System.out.println(p2);
Run Code Online (Sandbox Code Playgroud)
如果需要副本,请调用clone(),否则请调用构造函数。
标准克隆方法(java.lang.Object.clone())在不调用构造函数的情况下创建对象的浅表副本。如果需要深层副本,则必须重写clone方法。
而且不用担心性能。
性能取决于克隆方法和构造函数的内容,而不取决于所使用的技术(新技术或克隆技术)本身。
编辑:克隆和构造函数不是真正地彼此替代,它们实现了不同的目的
我为 class创建了简单的基准测试Person
:
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Run Code Online (Sandbox Code Playgroud)
并得到以下结果:
Benchmark Mode Cnt Score Error Units
MyBenchmark.viaClone avgt 10 10.041 ± 0.059 ns/op
MyBenchmark.viaNew avgt 10 7.617 ± 0.113 ns/op
Run Code Online (Sandbox Code Playgroud)
这个简单的基准测试表明,从源对象实例化新对象并设置相应的属性比克隆它花费的时间少 25%。
小智 5
public void testPerformance(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
long start = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++){
SimpleDateFormat localSdf = (SimpleDateFormat)sdf.clone();
}
System.out.println("Cloning : " + (System.currentTimeMillis() - start) + " ms");
start = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++){
Object localSdf = new SimpleDateFormat("yyyy-MM-dd");
}
System.out.println("Creating : " + (System.currentTimeMillis() - start) + " ms");
}
Run Code Online (Sandbox Code Playgroud)
克隆:302毫秒创建:885毫秒
归档时间: |
|
查看次数: |
6969 次 |
最近记录: |