Java几种创建对象速度的比较

测试了一下Java各种创建对象的速度,其中没有使用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.通过json序列化方式

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

通过class方式创建对象耗时:84

通过clone方式创建对象耗时:352

通过json方式创建对象耗时:3310

Java几种创建对象速度的比较

时间: 2024-11-01 18:02:25

Java几种创建对象速度的比较的相关文章

(转)java 23种设计模式

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

java几种远程服务调用协议的比较

原文地址:http://www.cnblogs.com/jifeng/archive/2011/07/20/2111183.html 一.综述 本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能. RMI是java语言本身提供的远程通讯协议,稳定高效,是EJB的基础.但它只能用于JAVA程序之间的通讯. Hessian和Burlap是caucho公司提供的开源协议,基于HTTP传输,服务端不用开防

java 23 种设计模式

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式.用一个图片来整体描述一下: 二.设计模式的六大原则 1.开闭原则(Open Clo

java 四种内部类的学习

内部类 定义在外部类的内部, 编译后是独立存在的类 可以访问外部类的私有成员,且不破坏封装 成员内部类 用"外部类类名.this"访问外部类的当前对象 创建对象:先创建外部类对象,再通过"外部类对象.new 内部类类名"创建内部类对象 静态内部类 只能访问外部类的静态成员 创建对象:直接用"new 外部类类名.内部类类名()" 局部内部类 定义在外部类的方法内部 作用范围:从定义开始到所在的代码块结束 同局部变量 不仅可以访问外部类的成员,还可以

Java四种引用包括强引用,软引用,弱引用,虚引用

Java四种引用包括强引用,软引用,弱引用,虚引用. 强引用: 只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.equels(new Object());而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常所用到的编码形式. 软引用: 非必须引用,内存溢出之前进行回收,可以通过以下代码实现Object obj = new Object();S

Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? Java new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 1 2 3 4 5 6 7 new Thread(new

Java四种线程池

Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor 时间:2015-10-20 22:37:40      阅读:8762      评论:0      收藏:0      [点我收藏+] 介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异

Java几种常用的实现排序方法

import java.util.Random; public class NumberSort{ /** * 私有构造方法,禁止实例化 */ private NumberSort(){ super(); } /** * 冒泡排序 * 比较相邻的元素.如果第一个比第二个大,就叫唤他们两个位置. * 对每一组相邻的元素作同样的工作,从开始的第一对到结束后的最后一对,这样剩下的最后一个应该是最大的数. * 针对所有元素重复以上操作,除了最后一个. * 持续对越来越少的数进行以上的操作,直到没有任何一

java四种数组排序

数组的四种排序 1.快速排序法Arrays.sort(); 用法1.sort(byte[] a) 对指定的 byte 型数组按数字升序进行排序. sort(byte[] a, int fromIndex, int toIndex) 对指定 byte 型数组的指定范围按数字升序进行排序. sort(char[] a) 对指定的 char 型数组按数字升序进行排序. sort(char[] a, int fromIndex, int toIndex) 对指定 char 型数组的指定范围按数字升序进行