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

来源:互联网 发布:无名智者软件 编辑:程序博客网 时间:2024/05/21 10:31

        在工作内容之余,对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
原创粉丝点击