java常用对象序列化对象性能简单比较

        在工作内容之余,对java的几种序列化方式进行了性能的简单测试,为什么说简单呢,我因为我只用了HashMap和简单的一个Object进行序列化测试。我选用的序列化方式分别是jdk Serialize、kryo、jackson(序列化成为json),之所以选择这三种,是因为目前没有必要进行跨语言的序列化,同时这三种序列化方式是对类没有任何的侵入性的。

        先展示下我们接下来需要序列化的Object。

       

import java.io.Serializable;
import java.util.Date;

/**
 * Created by lsz on 14-10-27.
 */
public class SerializeObject implements Serializable {
    String name = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    String address = "skfadkfjdakfjkl";
    int age = 12;
    Date date = new Date();
    String name2 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    String address2 = "skfadkfjdakfjkl";
    int age2 = 12;
    Date date2 = new Date();
    String name3 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    String address3 = "skfadkfjdakfjkl";
    int age3 = 12;
    Date date3 = new Date();
    String name4 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    String address4 = "skfadkfjdakfjkl";
    int age4 = 12;
    Date date4 = new Date();
    String name5 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    String address5 = "skfadkfjdakfjkl";
    int age5 = 12;
    Date date5 = new Date();
    String name6 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    String address6 = "skfadkfjdakfjkl";
    int age6 = 12;
    Date date6 = new Date();

    public String getName() {
        return name;
    }
    ....
}

        由于是简单的测试,所以没有构造嵌套对象的类,对于压力测试,自然而然出动上节说到的 压力测试模板类。接下来贴下三个不同的测试

       

import com.youboy.util.bench.CommonsTest;
import com.youboy.util.bench.Function;
import com.youboy.util.serializer.JdkSerializationUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by lsz on 14-10-24.
 */
public class JDKSerializeTest {
    public static void main(String[] args) {
        final JdkSerializationUtil jdkSerializationUtil = new JdkSerializationUtil();

//        final Map<String,String> map =  new HashMap<String,String>();
//        map.put("xxx","1");
//        map.put("xxx2","1");
//        map.put("xxx3","1");
//        map.put("xxx4","1");
//        map.put("xxx5","1");
        final SerializeObject serializeObject = new SerializeObject();
        new CommonsTest(1,new Function<Object, Boolean>() {
            @Override
            public Boolean apply(Object o) {
                //byte[] bs = jdkSerializationUtil.serialize(map);
                byte[] bs = jdkSerializationUtil.serialize(serializeObject);
                return true;
            }
        }).start();
    }
}

import com.youboy.util.bench.CommonsTest;
import com.youboy.util.bench.Function;
import com.youboy.util.serializer.JdkSerializationUtil;
import com.youboy.util.serializer.KryoKit;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by lsz on 14-10-24.
 */
public class KryoSerializeTest {
    public static void main(String[] args) {
        final JdkSerializationUtil jdkSerializationUtil = new JdkSerializationUtil();
       
//        final Map<String,String> map =  new HashMap<String,String>();
//        map.put("xxx","1");
//        map.put("xxx2","1");
//        map.put("xxx3","1");
//        map.put("xxx4","1");
//        map.put("xxx5","1");
        final SerializeObject serializeObject = new SerializeObject();
        new CommonsTest(1,new Function<Object, Boolean>() {
            @Override
            public Boolean apply(Object o) {
                //byte[] bs = KryoKit.serialize(map);
                byte[] bs = KryoKit.serialize(serializeObject);
                return true;
            }
        }).start();
    }
}

import com.youboy.util.bench.CommonsTest;
import com.youboy.util.bench.Function;
import org.codehaus.jackson.map.ObjectMapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by lsz on 14-10-24.
 */
public class JackSonSerializeTest {
    public static void main(String[] args) {
        final ObjectMapper om = new ObjectMapper();

//        final Map<String,String> map =  new HashMap<String,String>();
//        map.put("xxx","1");
//        map.put("xxx2","1");
//        map.put("xxx3","1");
//        map.put("xxx4","1");
//        map.put("xxx5","1");
//        map.put("xxx6","1");
//        map.put("xxx7","1");
//        map.put("xxx8","1");
//        map.put("xxx9","1");
//        map.put("xxx10","1");
        final SerializeObject serializeObject = new SerializeObject();
        new CommonsTest(1,new Function<Object, Boolean>() {
            @Override
            public Boolean apply(Object o) {
                try {
                    byte[] bytes = om.writeValueAsBytes(serializeObject);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return true;
            }
        }).start();
    }
}

        由于有之前分享的压力测试的模版类,所以这次的测试代码需要写的特别少,一般序列化的测试都是直接压单线程的,我的电脑是i3-8G内存的 测试的结果如下。

jdk serialize

---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------126827/126865/126867/1/20ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------259472/386320/193160/2/20ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------247616/633944/211315/3/20ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------238501/872433/218108/4/20ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------299197/1171644/234329/5/20ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------295822/1467461/244577/6/20ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------284848/1752298/250328/7/20ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------290564/2042872/255359/8/20ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------289212/2332080/259120/9/20ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------286421/2618503/261850/10/20ms

kryo

---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------303167/303218/303221/1/104ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------701725/1004936/502471/2/104ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------804144/1809115/603039/3/104ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------807456/2616492/654123/4/104ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------814996/3431569/686314/5/104ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------789352/4220917/703486/6/104ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------795400/5016302/716614/7/104ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------789596/5805908/725738/8/104ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------770838/6576691/730743/9/104ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------792176/7368909/736891/10/104ms

Jackson

---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------286197/286275/286280/1/80ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------459438/745635/372817/2/80ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------409417/1155089/385030/3/80ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------486433/1641516/410379/4/80ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------410846/2052382/410476/5/80ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------402176/2454544/409091/6/80ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------440726/2895281/413611/7/80ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------497980/3393311/424164/8/80ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------498920/3892314/432479/9/80ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------512419/4404589/440459/10/80ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------511760/4916352/446941/11/80ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间
---------------------510432/5426776/452231/12/80ms
---------------------当前1s内的执行数/总的执行数/平均的执行数/执行的时间/最长执行时间

从上面的结果可以看到,序列化能力最高的就是kryo。尽管序列化的对象是个简单的对象,但是其基本的属性都有了。

另外,之前还对HashMap进行了序列化, 猜猜看哪个方案的性能最高!!      




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值