Kryo序列化框架开发测试 首先加入Kryo依赖包: asm-4.0.jar kryo-2.21-all.jar minlog-1.2.jar minlog-none-1.2.jar objenesis-1.2.jar reflectasm-1.07.jar 加入依赖包之后就可以开发测试了: Kryo序列化: public class MySerializableTest { public static void main(String[] args) throws IOException { long start = System.currentTimeMillis(); setSerializableObject(); System.out.println("Kryo Serializable writeObject time:" + (System.currentTimeMillis() - start) + " ms" ); start = System.currentTimeMillis(); getSerializableObject(); System.out.println("Kryo Serializable readObject time:" + (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("file.bin")); for (int i = 0; i < 1000000; 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("file.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){ } } } 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; } } 现在我们来做个测试,与java自带的序列化做比较,看一下序列化与反序列化的运行时间与序列化后文件大小. Java 序列化 public class MyJavaSer { public static void main(String[] args) throws IOException, ClassNotFoundException { long start = System.currentTimeMillis(); setSerializableObject(); System.out.println("java Serializable writeObject time:" + (System.currentTimeMillis() - start) + " ms" ); start = System.currentTimeMillis(); getSerializableObject(); System.out.println("java Serializable readObject time:" + (System.currentTimeMillis() - start) + " ms"); } public static void setSerializableObject() throws IOException{ FileOutputStream fo = new FileOutputStream("data.ser"); ObjectOutputStream so = new ObjectOutputStream(fo); for (int i = 0; i < 1000000; 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("data.ser"); 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(); } } } 看一下测试结果(此测试是Simple类没带map属性的情况下测试的): Kryo: 运行时间: Kryo Serializable writeObject time:1203 ms Kryo Serializable readObject time:906 ms 文件大小: file.bin 13.2M Java: 运行时间 java Serializable writeObject time:21156 ms java Serializable readObject time:15500 ms 文件大小: data.ser 22.7M 经过反复测试: Kryo的运行速度是java Serializable 的20倍左右 Kryo的文件大小是java Serializable的一半左右。 注意: 经过测试,序列化对象最好不要带有Java集合类(如:Map,List等),如有会大大降低序列化效率。
相关推荐
**Kryo序列化** Kryo是由Esoteric Software开发的高性能序列化库,适用于Java和Scala。相比Java内置的序列化,Kryo提供了更快的速度和更小的序列化结果。Kryo不依赖于Java的序列化机制,而是有自己的序列化框架,...
本项目是针对高性能Java序列化的框架fse设计源码,共包含73个文件,涵盖66个Java源文件、2个XML配置文件、1个Git忽略文件、1个LICENSE...性能测试显示,其序列化效率约为Kryo的2.3倍,反序列化效率约为Kryo的1.4倍。
Java序列化相对较慢,对于高并发和大数据量的场景,可能需要考虑其他的序列化库,如FST、Kryo或Google的Protobuf等。这些库提供更快的速度和更小的序列化数据大小。 7. **Netty与协议**: Netty支持多种协议,如...
总结,使用Kryo实现Tomcat Session共享涉及了分布式系统的会话管理、Kryo序列化库的应用,以及Tomcat的集群配置。这个过程需要对Java Web开发、网络通信和序列化有深入理解,同时也需要熟悉Tomcat的内部工作机制。...
Kryo 是一个快速、高效的对象图形序列化框架,广泛应用于Java和Scala编程语言中。它允许将Java或Scala对象转换为字节流,便于存储或网络传输,同时也支持反序列化回原始对象。Kryo 2.17 可能包含了性能优化、新功能...
2. **kryo-2.20-all.jar**:Kryo是一个快速、高效的对象序列化框架,适用于Java。在memcached场景中,Kryo用作序列化器,将Java对象转换为字节流以便存储在memcached中,同时能快速反序列化回对象。Kryo的高效性能...
"jvm-serializers"项目提供了一个基准测试框架,用于评估和比较在JVM上运行的各种序列化库的性能。以下是一些关键知识点: 1. **Java序列化**:Java自带的序列化机制,通过实现`java.io.Serializable`接口,可以将...
在Java中,有Java序列化、protobuf、Kryo等工具。 4. **ORM框架**:如Hibernate、MyBatis等,它们在传统的Web开发中广泛使用,但在大数据环境下,可能会有针对分布式系统优化的ORM解决方案,如BORM可能就是这样的...
Dubbo是一款高性能、轻量级的开源RPC框架,它支持多种通信协议和序列化方式,具备服务自动注册、服务发现、软负载均衡等功能,能够有效管理和优化大型分布式系统的服务交互。 3. **Dubbo的使用场景有哪些?** - ...
比如,通过使用Kryo序列化,能够减少数据在网络中的传输量,提升Shuffle的效率。除此之外,还可以通过优化磁盘存储结构,比如使用Tachyon等内存计算框架来提升读写速度,或者利用SSD来减少磁盘I/O时间。 在实施优化...
Akka提供了多种序列化方式,如Java序列化、Kryo等。 #### 5. Akka的网络功能 - **I/O**:Akka Streams提供了非阻塞的I/O操作,非常适合于处理大量的数据流。 - **Using TCP/UDP**:Akka提供了对TCP/IP协议的支持,...
MyBatis是一种优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...
- **Data serialization**:选择合适的序列化方式,如Kryo,提高数据传输效率。 - **Shuffle operations**:合理规划shuffle操作,减少网络传输和磁盘I/O。 Spark-1.3.1-bin-hadoop2.6.tgz的安装和使用,对于学习...
- **序列化**: 内置多种序列化机制,如Java标准序列化、Google Protocol Buffers、Kryo等。 - **模块化设计**: 允许用户根据需求选择功能模块,降低资源消耗。 **2. 使用Infinispan示例** 在`InfinispanExample-...
5. **序列化机制的定制**:Spark默认使用Kryo进行序列化,但也可以自定义。如果你的业务中有特殊类型的数据,可能需要在`org.apache.spark.serializer`模块中调整序列化策略。 6. **故障恢复机制的调整**:Spark的...