Java GraalVM Native Image 基准测试
这些测量数据涵盖 GraalVM Native Image 中的 Fory 二进制对象序列化。结果取决于记录的工作负载和环境。
基准测试
Fory 与 GraalVM JDK 序列化的性能对比:
| 类型 | 压缩 | 速度提升 | 大小 |
|---|---|---|---|
| Struct | 关闭 | 46x | 43% |
| Struct | 开启 | 24x | 31% |
| Pojo | 关闭 | 12x | 56% |
| Pojo | 开启 | 12x | 48% |
基准测试代码请参阅 Benchmark.java。
Struct 基准测试
类字段
public class Struct implements Serializable {
public int f1;
public long f2;
public float f3;
public double f4;
public int f5;
public long f6;
public float f7;
public double f8;
public int f9;
public long f10;
public float f11;
public double f12;
}
基准测试结果
未启用压缩:
Benchmark repeat number: 400000
Object type: class org.apache.fory.graalvm.Struct
Compress number: false
Fory size: 76.0
JDK size: 178.0
Fory serialization took mills: 49
JDK serialization took mills: 2254
Compare speed: Fory is 45.70x speed of JDK
Compare size: Fory is 0.43x size of JDK
启用数字压缩:
Benchmark repeat number: 400000
Object type: class org.apache.fory.graalvm.Struct
Compress number: true
Fory size: 55.0
JDK size: 178.0
Fory serialization took mills: 130
JDK serialization took mills: 3161
Compare speed: Fory is 24.16x speed of JDK
Compare size: Fory is 0.31x size of JDK
POJO 基准测试
类字段
public class Foo implements Serializable {
int f1;
String f2;
List<String> f3;
Map<String, Long> f4;
}
基准测试结果
未启用压缩:
Benchmark repeat number: 400000
Object type: class org.apache.fory.graalvm.Foo
Compress number: false
Fory size: 541.0
JDK size: 964.0
Fory serialization took mills: 1663
JDK serialization took mills: 16266
Compare speed: Fory is 12.19x speed of JDK
Compare size: Fory is 0.56x size of JDK
启用数字压缩:
Benchmark repeat number: 400000
Object type: class org.apache.fory.graalvm.Foo
Compress number: true
Fory size: 459.0
JDK size: 964.0
Fory serialization took mills: 1289
JDK serialization took mills: 15069
Compare speed: Fory is 12.11x speed of JDK
Compare size: Fory is 0.48x size of JDK