Java 基准测试
系统环境
- 操作系统:4.9.151-015.x86_64
- 处理器:Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
- 字节序:Little Endian
- L1d cache: 32K
- L1i cache:32K
- L2 cache: 1024K
- L3 cache: 33792K
JMH 参数
不要跳过 warm up,否则结果不准确。
-f 1 -wi 3 -i 3 -t 1 -w 2s -r 2s -rf cs
基准数据
Struct
Struct 是一个包含 100 个基础类型字段的类:
public class Struct {
public int f1;
public long f2;
public float f3;
public double f4;
// ...
public double f99;
}
Struct2
Struct2 是一个包含 100 个装箱类型字段的类:
public class Struct {
public Integer f1;
public Long f2;
public Float f3;
public Double f4;
// ...
public Double f99;
}
MediaContent 基准
MEDIA_CONTENT 来自 jvm-serializers.
Sample
SAMPLE 来自 kryo benchmark
基准图表
序列化到堆内缓冲区
将数据序列化到 Java 字节数组。
Java schema 一致性序列化
反序列化端必须与序列化端使用相同的类定义。 该模式不支持类的前向/后向兼容。

Java schema 兼容模式序列化
反序列化端可以与序列化端使用不同的类定义。 该模式支持类的前向/后向兼容。

Java schema 一致性反序列化
反序列化端必须与序列化端使用相同的类定义。 该模式不支持类的前向/后向兼容。

Java schema 兼容模式反序列化
反序列化端可以与序列化端使用不同的类定义。 该模式支持类的前向/后向兼容。

堆外序列化
将数据序列化到堆外内存。
Java schema 一致性序列化
反序列化端必须与序列化端使用相同的类定义。 该模式不支持类的前向/后向兼容。

Java schema 兼容模式序列化
反序列化端可以与序列化端使用不同的类定义。 该模式支持类的前向/后向兼容。

Java schema 一致性反序列化
反序列化端必须与序列化端使用相同的类定义。 该模式不支持类的前向/后向兼容。

Java schema 兼容模式反序列化
反序列化端可以与序列化端使用不同的类定义。 该模式支持类的前向/后向兼容。

零拷贝序列化
注意:零拷贝序列化只是在序列化阶段避免拷贝;如果将数据发送到其他机器,仍可能发生拷贝。
但如果在同一节点进程间序列化并使用共享内存,且数据在序列化前已位于堆外,那么其他进程可无拷贝读取该缓冲区。
Java 零拷贝序列化到堆内缓冲区
