最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java原生序列化和Kryo序列化性能實(shí)例對(duì)比分析

 更新時(shí)間:2017年10月09日 10:29:33   作者:壞~牧羊人  
這篇文章主要介紹了java原生序列化和Kryo序列化性能實(shí)例對(duì)比分析,涉及Java和kryo序列化和反序列化相關(guān)實(shí)例,小編覺(jué)得很不錯(cuò),這里分享給大家,希望給大家一個(gè)參考。

簡(jiǎn)介

最近幾年,各種新的高效序列化方式層出不窮,不斷刷新序列化性能的上限,最典型的包括:

專(zhuān)門(mén)針對(duì)Java語(yǔ)言的:Kryo,F(xiàn)ST等等

跨語(yǔ)言的:Protostuff,ProtoBuf,Thrift,Avro,MsgPack等等

這些序列化方式的性能多數(shù)都顯著優(yōu)于hessian2(甚至包括尚未成熟的dubbo序列化)。有鑒于此,我們?yōu)閐ubbo引入Kryo和FST這 兩種高效Java序列化實(shí)現(xiàn),來(lái)逐步取代hessian2。其中,Kryo是一種非常成熟的序列化實(shí)現(xiàn),已經(jīng)在Twitter、Groupon、 Yahoo以及多個(gè)著名開(kāi)源項(xiàng)目(如Hive、Storm)中廣泛的使用。而FST是一種較新的序列化實(shí)現(xiàn),目前還缺乏足夠多的成熟使用案例,但它還是非 常有前途的,下面我們比較下,java原生序列化Kryo序列化性能比較

1、實(shí)體類(lèi) Simple.java

package bhz.entity;
import java.io.Serializable;
import java.util.Map;
public class Simple implements Serializable
{ 
   private static final long serialVersionUID = -4914434736682797743L; 
   private String name; 
   private int age; 
   private Map<String,Integer> map; 
   public Simple(){ 
   } 
   public Simple(String name,int age,Map<String,Integer> map){ 
     this.name = name; 
     this.age = age; 
     this.map = map; 
   } 
   public String getName() { 
    return name; 
   } 
   public void setName(String name) { 
    this.name = name; 
   } 
   public int getAge() { 
    return age; 
   } 
   public void setAge(int age) { 
    this.age = age; 
   } 
   public Map<String, Integer> getMap() { 
    return map; 
   } 
   public void setMap(Map<String, Integer> map) { 
    this.map = map; 
   } 
} 

2、java原生序列化 OriginalSerializable.java

package bhz.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;
import bhz.entity.Simple;
public class OriginalSerializable { 
  public static void main(String[] args) throws IOException, ClassNotFoundException { 
    long start = System.currentTimeMillis(); 
    setSerializableObject(); 
    System.out.println("java原生序列化時(shí)間:" + (System.currentTimeMillis() - start) + " ms" );  
    start = System.currentTimeMillis(); 
    getSerializableObject(); 
    System.out.println("java原生反序列化時(shí)間:" + (System.currentTimeMillis() - start) + " ms"); 
  } 
  public static void setSerializableObject() throws IOException{ 
    FileOutputStream fo = new FileOutputStream("D:/file2.bin"); 
    ObjectOutputStream so = new ObjectOutputStream(fo); 
    for (int i = 0; i < 100000; i++) { 
      Map<String,Integer> map = new HashMap<String, Integer>(2); 
      map.put("zhang0", i); 
      map.put("zhang1", i); 
      so.writeObject(new Simple("zhang"+i,(i+1),map)); 
    } 
    so.flush(); 
    so.close(); 
  } 
  public static void getSerializableObject(){ 
     FileInputStream fi; 
    try { 
      fi = new FileInputStream("D:/file2.bin"); 
      ObjectInputStream si = new ObjectInputStream(fi); 
      Simple simple =null; 
      while((simple=(Simple)si.readObject()) != null){ 
        //System.out.println(simple.getAge() + " " + simple.getName()); 
      } 
      fi.close(); 
      si.close(); 
    } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
    } catch (IOException e) { 
      //e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
    } 
  } 
} 

3、kyro序列化 KyroSerializable.java

package bhz.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.objenesis.strategy.StdInstantiatorStrategy;
import bhz.entity.Simple;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.KryoException;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
public class KyroSerializable { 
  public static void main(String[] args) throws IOException { 
    long start = System.currentTimeMillis(); 
    setSerializableObject(); 
    System.out.println("Kryo 序列化時(shí)間:" + (System.currentTimeMillis() - start) + " ms" ); 
    start = System.currentTimeMillis(); 
    getSerializableObject(); 
    System.out.println("Kryo 反序列化時(shí)間:" + (System.currentTimeMillis() - start) + " ms"); 
  } 
  public static void setSerializableObject() throws FileNotFoundException{ 
    Kryo kryo = new Kryo(); 
    kryo.setReferences(false); 
    kryo.setRegistrationRequired(false); 
    kryo.setInstantiatorStrategy(new StdInstantiatorStrategy()); 
    kryo.register(Simple.class); 
    Output output = new Output(new FileOutputStream("D:/file1.bin")); 
    for (int i = 0; i < 100000; i++) { 
      Map<String,Integer> map = new HashMap<String, Integer>(2); 
      map.put("zhang0", i); 
      map.put("zhang1", i); 
      kryo.writeObject(output, new Simple("zhang"+i,(i+1),map)); 
    } 
    output.flush(); 
    output.close(); 
  } 
  public static void getSerializableObject(){ 
    Kryo kryo = new Kryo(); 
    kryo.setReferences(false); 
    kryo.setRegistrationRequired(false); 
    kryo.setInstantiatorStrategy(new StdInstantiatorStrategy()); 
    Input input; 
    try { 
      input = new Input(new FileInputStream("D:/file1.bin")); 
      Simple simple =null; 
      while((simple=kryo.readObject(input, Simple.class)) != null){ 
        //System.out.println(simple.getAge() + " " + simple.getName() + " " + simple.getMap().toString()); 
      } 
      input.close(); 
    } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
    } catch(KryoException e){ 
    } 
  } 
} 

 4、測(cè)試結(jié)果對(duì)比

java原生序列化時(shí)間:8281 ms

java原生反序列化時(shí)間:5899 ms


Kryo 序列化時(shí)間:630 ms

Kryo 反序列化時(shí)間:15 ms

經(jīng)過(guò)對(duì)比,可以發(fā)現(xiàn)kryo是java原生序列化性能十幾倍

總結(jié)

以上就是本文關(guān)于java原生序列化和Kryo序列化性能實(shí)例對(duì)比分析的全部?jī)?nèi)容,希望對(duì)大家有所幫助,感興趣的朋友可以參考:Kryo框架使用方法代碼示例  實(shí)例解析Json反序列化之ObjectMapper(自定義實(shí)現(xiàn)反序列化方法)  淺談Java序列化和hessian序列化的差異等,有什么問(wèn)題可以隨時(shí)留言,小編必定及時(shí)回復(fù)大家,感謝朋友們對(duì)本站的支持。

相關(guān)文章

  • java中transient關(guān)鍵字分析

    java中transient關(guān)鍵字分析

    這篇文章主要介紹了java中transient關(guān)鍵字分析,transient與類(lèi)對(duì)象的序列化息息相關(guān),序列化保存的是 類(lèi)對(duì)象 狀態(tài),被transient關(guān)鍵字修飾的成員變量,在類(lèi)的實(shí)例化對(duì)象的序列化處理過(guò)程中會(huì)被忽略,變量不會(huì)貫穿對(duì)象的序列化和反序列化,需要的朋友可以參考下
    2023-09-09
  • Spring Boot 入門(mén)指南

    Spring Boot 入門(mén)指南

    Spring Boot 簡(jiǎn)化了Spring 應(yīng)用的初始搭建、開(kāi)發(fā)過(guò)程,開(kāi)發(fā)人員可使用Spring提供的特定的方式來(lái)進(jìn)行配置,不再需要重復(fù)自定義樣板化的配置。本文就將帶你入門(mén)Spring Boot
    2021-05-05
  • 關(guān)于Java中阻塞隊(duì)列BlockingQueue的詳解

    關(guān)于Java中阻塞隊(duì)列BlockingQueue的詳解

    這篇文章主要介紹了關(guān)于Java中阻塞隊(duì)列BlockingQueue的詳解,BlockingQueue是為了解決多線程中數(shù)據(jù)高效安全傳輸而提出的,從阻塞這個(gè)詞可以看出,在某些情況下對(duì)阻塞隊(duì)列的訪問(wèn)可能會(huì)造成阻塞,需要的朋友可以參考下
    2023-05-05
  • 淺談resultMap的用法及關(guān)聯(lián)結(jié)果集映射

    淺談resultMap的用法及關(guān)聯(lián)結(jié)果集映射

    這篇文章主要介紹了resultMap的用法及關(guān)聯(lián)結(jié)果集映射操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java流程控制語(yǔ)句最全匯總(下篇)

    Java流程控制語(yǔ)句最全匯總(下篇)

    這篇文章主要介紹了Java流程控制語(yǔ)句最全匯總(下篇),本文章內(nèi)容詳細(xì),通過(guò)案例可以更好的理解數(shù)組的相關(guān)知識(shí),本模塊分為了三部分,本次為下篇,需要的朋友可以參考下
    2023-01-01
  • SpringBoot、Java 使用 Jsoup 解析 HTML 頁(yè)面的詳細(xì)步驟

    SpringBoot、Java 使用 Jsoup 解析 HTML 頁(yè)面

    這篇文章主要介紹了SpringBoot、Java 使用 Jsoup 解析 HTML 頁(yè)面的詳細(xì)步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java注解詳解之@Override注解

    Java注解詳解之@Override注解

    這篇文章主要給大家介紹了關(guān)于Java注解之@Override注解的相關(guān)資料,@Override是Java中的一個(gè)注解,表示一個(gè)方法是重寫(xiě)(Override)了父類(lèi)中的方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 解決SpringAop內(nèi)部調(diào)用時(shí)不經(jīng)過(guò)代理類(lèi)的問(wèn)題

    解決SpringAop內(nèi)部調(diào)用時(shí)不經(jīng)過(guò)代理類(lèi)的問(wèn)題

    這篇文章主要介紹了解決SpringAop內(nèi)部調(diào)用時(shí)不經(jīng)過(guò)代理類(lèi)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java 多線程有序執(zhí)行的幾種方法總結(jié)

    Java 多線程有序執(zhí)行的幾種方法總結(jié)

    這篇文章主要介紹了Java 多線程有序執(zhí)行的幾種方法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • spring?boot如何通過(guò)自定義注解和AOP攔截指定的請(qǐng)求

    spring?boot如何通過(guò)自定義注解和AOP攔截指定的請(qǐng)求

    這篇文章主要介紹了spring?boot通過(guò)自定義注解和AOP攔截指定的請(qǐng)求,本文主要通過(guò)切面類(lèi)和自定注解的方式,攔截指定的接口(代碼中已經(jīng)作了詳細(xì)的說(shuō)明),需要的朋友可以參考下
    2024-06-06

最新評(píng)論

丽江市| 安顺市| 聊城市| 阳城县| 连云港市| 定兴县| 长垣县| 陆丰市| 平和县| 兴隆县| 米脂县| 汨罗市| 长子县| 长寿区| 墨竹工卡县| 金山区| 塔河县| 苍溪县| 高青县| 依安县| 两当县| 宜丰县| 开化县| 隆德县| 房产| 同仁县| 开封市| 米脂县| 林芝县| 闸北区| 汶上县| 海原县| 潍坊市| 井研县| 龙井市| 乌拉特前旗| 宁安市| 万荣县| 云梦县| 铜川市| 镇安县|