欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)介

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

專門(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)文章

  • SpringBoot項(xiàng)目中連接SQL Server的三種方式

    SpringBoot項(xiàng)目中連接SQL Server的三種方式

    連接SQL Server是許多Spring Boot項(xiàng)目中常見(jiàn)的需求之一,本文主要介紹了SpringBoot項(xiàng)目中連接SQL Server的三種方式,具有一定的參考價(jià)值 ,感興趣的可以了解一下
    2023-09-09
  • SpringBoot集成支付寶沙箱支付(支付、退款)

    SpringBoot集成支付寶沙箱支付(支付、退款)

    這篇文章主要為大家詳細(xì)介紹了SpringBoot集成支付寶沙箱支付,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 解決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
  • SpringBoot過(guò)濾敏感詞的兩種實(shí)現(xiàn)方式

    SpringBoot過(guò)濾敏感詞的兩種實(shí)現(xiàn)方式

    Spring Boot本身并不直接提供過(guò)濾敏感詞的功能,但你可以使用第三方庫(kù)或者自定義過(guò)濾器來(lái)實(shí)現(xiàn)這個(gè)需求,所以本文給大家介紹了SpringBoot過(guò)濾敏感詞的兩種實(shí)現(xiàn)方式,感興趣的朋友可以參考下
    2024-06-06
  • Java中的復(fù)合數(shù)據(jù)類(lèi)型

    Java中的復(fù)合數(shù)據(jù)類(lèi)型

    這篇文章主要介紹了Java中的復(fù)合數(shù)據(jù)類(lèi)型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中類(lèi)的加載器及其加載過(guò)程

    Java中類(lèi)的加載器及其加載過(guò)程

    字節(jié)碼文件在類(lèi)加載器子系統(tǒng)中要進(jìn)行加載、鏈接、初始化等處理,我們這里詳細(xì)來(lái)談其中過(guò)程,本文主要介紹了Java中類(lèi)的加載器及其加載過(guò)程,感興趣的同學(xué)可以參考一下
    2023-04-04
  • 如何利用Java在圖片上添加文字水印效果

    如何利用Java在圖片上添加文字水印效果

    最近發(fā)現(xiàn)經(jīng)常被別的網(wǎng)站盜用,而且不注明出處,因此不得不加上水印,這篇文章主要給大家介紹了關(guān)于如何利用Java在圖片上添加文字水印效果的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Okhttp在SpringBoot中的應(yīng)用實(shí)戰(zhàn)記錄(太強(qiáng)了)

    Okhttp在SpringBoot中的應(yīng)用實(shí)戰(zhàn)記錄(太強(qiáng)了)

    這篇文章主要給大家介紹了關(guān)于Okhttp在SpringBoot中應(yīng)用實(shí)戰(zhàn)的相關(guān)資料,在Spring Boot中使用OkHttp主要是為了發(fā)送HTTP請(qǐng)求和處理響應(yīng),OkHttp是一個(gè)高效、易用的HTTP客戶端庫(kù),它具有簡(jiǎn)潔的API和強(qiáng)大的功能,需要的朋友可以參考下
    2023-12-12
  • 關(guān)于Spring統(tǒng)一異常處理及說(shuō)明

    關(guān)于Spring統(tǒng)一異常處理及說(shuō)明

    這篇文章主要介紹了關(guān)于Spring統(tǒng)一異常處理及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • java布局管理之CardLayout簡(jiǎn)單實(shí)例

    java布局管理之CardLayout簡(jiǎn)單實(shí)例

    這篇文章主要為大家詳細(xì)介紹了java布局管理之CardLayout的簡(jiǎn)單實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評(píng)論