gpt4 book ai didi

java kryo 3.0.3 对象的序列化速度较低

转载 作者:行者123 更新时间:2023-12-01 10:03:54 24 4
gpt4 key购买 nike

我正在尝试通过使用 kryo 库来获得更好的对象序列化性能。

我还有下一个类

public class CustomClass {

private String name;
private int[] array;


public CustomClass(String name, int size){
this.name = name;
fillArray(size);
}

private CustomClass(){ }

private void fillArray(int size){
array = new int[size];
Random random = new Random();
for (int i = 0; i < size; i++){
array[i] = random.nextInt();
}
}
}

我正在通过这种方法对其进行序列化,请注意我正在对单个实例进行序列化

public void kryoWrite(Object object){
Kryo kryo = new Kryo();
Output output = null;
try {
output = new Output(new FileOutputStream("kryo.txt"));
kryo.writeObject(output, object);
} catch (IOException e){
e.printStackTrace();
} finally {
if (output != null) {
output.close();
}
}
}

但是使用标准 Java 的 Serializable 接口(interface)序列化同一对象的速度更快。例如,当我将 1000000 作为第二个参数传递给构造函数 kryo 时,在 188 毫秒 内序列化对象,而当 Serialized188 毫秒内序列化完全相同的对象时,>136 毫秒

那么我做错了什么(这是我歌曲中的回响贝斯,哈哈)?

编辑

大小为 1000000 的数组的序列化,通过这些方法适本地创建和序列化

public static int[] getArray(int size){
int[] array = new int[size];
Random random = new Random();
for (int i = 0; i < size; i++){
array[i] = random.nextInt();
}
return array;
}

public static void kryoWriteArray(int[] array) throws FileNotFoundException {
Kryo kryo = new Kryo();
Output output = new Output(new FileOutputStream("array.txt"));
output.writeInts(array);
output.close();
}

需要 139 毫秒。

最佳答案

一开始,如果没有完整的基准测试代码,就很难评论基准测试。如果需要进一步分析,请分享。尽管如此,我已经建议将对象创建(new CustomObject)从基准测试中剔除(如果情况还不是这样的话)(一般来说,我会创建 CustomObject 的数据)外部并将其传递到类中)。

为了能够重现此问题,我 adopted Kryo's SerializationBenchmarkTest使用长度为 1000000 的 int[] 来测试您的 CustomClass(请注意,此基准测试组合测量序列化和反序列化,也可以单独测量)。

综合结果显示了最佳 Java 序列化运行的以下内容(检查提到的提交以了解更多详细信息):

>>> Java serialization via Externalizable (best time): 870 ms
>>> Java serialization without try-catch via Externalizable (best time): 864 ms

对于最佳的 kryo 序列化运行,它显示:

>>> Kryo serialization without try-catch (best time): 835 ms
>>> Kryo unsafe serialization without try-catch, without ASM, without references (best time): 181 ms
>>> Kryo serialization without try-catch with fast streams (best time): 982 ms
>>> Kryo unmodified serialization (best time): 1,108 ms
>>> Kryo unsafe serialization without try-catch, without ASM (best time): 191 ms
>>> Kryo unsafe serialization without try-catch (best time): 193 ms
>>> Kryo serialization (best time): 989 ms

看起来,基于 Unsafe 的序列化似乎可以解决问题,所以我建议你应该尝试 Kryo 的 UnsafeOutput 而不是 Output >.

关于java kryo 3.0.3 对象的序列化速度较低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36604009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com