测试了一下Java各类建立对象的速度,其中没有使用JDK的序列化方式,而选择了号称速度比JDK序列化快不少的fastjson来实现,代码以下java
1.new 对象方式json
long s1 = System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) { Vehicle vehicle1 = new Vehicle(); } System.out.println("经过new方式建立对象耗时:" + (System.currentTimeMillis() - s1));
2.反射方式ide
long s1 = System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) { Vehicle vehicle1 = Vehicle.class.newInstance(); } System.out.println("经过class方式建立对象耗时:" + (System.currentTimeMillis() - s1));
3.经过对象的克隆方式测试
long s1 = System.currentTimeMillis(); Vehicle vehicle = new Vehicle(); for (int i = 0; i < 10000000; i++) { Vehicle vehicle1 = (Vehicle) vehicle.clone(); } System.out.println("经过clone方式建立对象耗时:" + (System.currentTimeMillis() - s1));
4.经过json序列化方式this
long s1 = System.currentTimeMillis(); Vehicle vehicle = new Vehicle(); String json = JSON.toJSONString(vehicle); for (int i = 0; i < 10000000; i++) { Vehicle vehicle1 = JSON.parseObject(json, Vehicle.class); } System.out.println("经过json方式建立对象耗时:" + (System.currentTimeMillis() - s1));
其中类Vehicle代码code
public class Vehicle implements Serializable,Cloneable { private int id; private String vinCode; private int model; private String terminalCode; private int tonnageType; private int ownType; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getVinCode() { return vinCode; } public void setVinCode(String vinCode) { this.vinCode = vinCode; } public int getModel() { return model; } public void setModel(int model) { this.model = model; } public String getTerminalCode() { return terminalCode; } public void setTerminalCode(String terminalCode) { this.terminalCode = terminalCode; } public int getTonnageType() { return tonnageType; } public void setTonnageType(int tonnageType) { this.tonnageType = tonnageType; } public int getOwnType() { return ownType; } public void setOwnType(int ownType) { this.ownType = ownType; } @Override public String toString() { return Objects.toStringHelper(this).add("id",id).add("vinCode",vinCode).add("model",model).add("terminalCode",terminalCode).add("tonnageType",tonnageType).add("ownType",ownType).toString(); } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Vehicle)) return false; Vehicle vehicle = (Vehicle) o; if (!terminalCode.equals(vehicle.terminalCode)) return false; return true; } @Override public int hashCode() { return terminalCode.hashCode(); } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); }
测试结果以下(时间单位:毫秒):对象
经过new方式建立对象耗时:6terminal
经过class方式建立对象耗时:84get
经过clone方式建立对象耗时:352hash
经过json方式建立对象耗时:3310