Kryo是专为Java设计的高性能序列化框架,相比Java原生序列化速度快5–10倍、体积减少40%–70%,通过ASM字节码生成跳过反射、支持类预注册和循环引用处理,但不跨语言且需注意安全配置与使用规范。

Java 原生序列化在体积、速度和安全性上存在明显短板,而 Hessian 和 Kryo 正是为解决这些问题设计的高效替代方案。它们不依赖反射、不携带冗余类信息、支持紧凑二进制格式,能在多数场景下将序列化耗时降低 5–10 倍,字节体积减少 40%–70%。
用 Hessian 实现跨语言兼容的高性能序列化
Hessian 是老牌二进制协议,适合需要 Java 与 Python/C++ 等互通的微服务或网关场景。它自带类型缓存和字符串引用机制,对重复字段和大对象有天然压缩优势。
- 引入 Maven 依赖:com.caucho 的 hessian(推荐 4.0.66+)
- 序列化只需两步:构造
Hessian2Output,调用writeObject() - 反序列化对应使用
Hessian2Input+readObject(Class),无需提前注册类 - 注意:Hessian 默认不校验类白名单,生产环境需配合
AbstractHessianInput.setSerializerFactory()设置安全策略
用 Kryo 实现极致性能的 Java 专属序列化
Kryo 不追求跨语言,专注在 JVM 内部做到最快最省。它通过 ASM 动态生成字段访问代码,跳过反射开销;支持注册机制,可预编译序列化器提升稳定性。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 添加依赖:
com.esotericsoftware:kryo:5.6.0(适配 JDK 17+ 和虚拟线程) - 初始化时注册常用类型(如
ArrayList、HashMap、自定义 POJO),避免运行时反射推断 - 启用
kryo.setReferences(true)支持循环引用,对复杂对象图更安全 - 搭配
UnsafeInput/Output或内存池(如ByteBufferOutputStream)进一步减少 GC 压力
关键避坑点:不是换框架就自动变快
实际效果取决于配置方式和使用习惯。原生序列化慢,不只是因为“用了 Serializable”,更因默认行为未优化。
立即学习“Java免费学习笔记(深入)”;
- Hessian 在高并发下若未复用
Hessian2Output实例(或未关闭流),容易触发频繁 buffer 分配 - Kryo 若未注册类且开启
setRegistrationRequired(true),首次序列化会动态注册并缓存,造成毛刺 - 两者都不处理
transient字段的语义——需自行确保敏感字段不被意外序列化 - 反序列化时,Kryo 默认不校验类版本,建议配合
CompatibleFieldSerializer或手动控制 schema 演进
怎么选:看你的系统边界在哪
如果服务全栈 Java、追求吞吐和延迟,Kryo 是更优解;如果要对接 Node.js 或 Go 编写的下游系统,Hessian 或 Protostuff 更稳妥。
- Dubbo 用户可直接在
protocol.serialization配置项切换为kryo或hessian2 - Redis 缓存场景中,Kryo 序列化后的
byte[]可直存,Hessian 同样适用,但注意二者格式互不兼容 - 日志或审计用途的数据落盘,优先选 Kryo;对外 API 或 SDK 输出,倾向 Hessian 或 JSON


















