자바 의 몇 가지 생 성 대상 속도 비교

3368 단어
자바 의 각종 생 성 대상 의 속 도 를 테스트 했 습 니 다. 그 중에서 JDK 의 직렬 화 방식 을 사용 하지 않 고 JDK 보다 속도 가 훨씬 빠르다 고 불 리 는 fastjson 을 선택 하여 이 루어 졌 습 니 다. 코드 는 다음 과 같 습 니 다.
1. new 개체 방식
long s1 = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
    Vehicle vehicle1 = new Vehicle();
}
System.out.println("  new        :" + (System.currentTimeMillis() - s1));

2. 반사 방식
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. 제 이 슨 서열 화 방식 으로
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 코드
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 방식 으로 대상 생 성 시간: 6
클 라 스 방식 으로 대상 생 성 시간: 84
clone 방식 으로 대상 생 성 시간: 352
json 방식 으로 대상 을 만 드 는 데 걸 리 는 시간: 3310

좋은 웹페이지 즐겨찾기