Я проверяю сериализацию Java, Kryo и Jackson.
Я создал крошечный код, который сериализует случайные объекты N раз. Я измеряю время сериализации и десериализации и размер объекта.
Я не очень доволен размером Kryo и Jackson, я читал о тестах, и люди видели большую разницу между Kryo и Jackson, но у меня в Kryo на 5-10% меньше. Я не знаю, пропустил ли я что-то в своем коде.
Это мой код для Kryo:
public static byte[] writeAsBytes(final Object oObject) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
Output output = new Output(bos);
kryo2.register(Event.class, 0);
kryo2.writeClassAndObject(output, oObject);
output.close();
return bos.toByteArray();
}
public static <T> T read(final byte[] aObject, final Class<T> clazz) {
T oObject;
ByteArrayInputStream is = new ByteArrayInputStream(aObject);
Input input = new Input(is);
kryo2.register(clazz, 0);
oObject = (T) kryo2.readClassAndObject(input);
input.close();
return oObject;
}
Я попытался зарегистрировать объекты и без регистрации, я получил тот же размер, и время было аналогичным.
Как я могу улучшить размер с помощью Kryo?? Размер и время я получил:
Size java:5245
Size jackson:5076
Size kryo:4790
14/09/22 12:18:05 INFO util.TimerUtil: DesSerializar Jackson:25135ms,Counter:10001
14/09/22 12:18:05 INFO util.TimerUtil: DesSerializar Java:2637ms,Counter:10001
14/09/22 12:18:05 INFO util.TimerUtil: DesSerializar Kryo:396ms,Counter:10001
14/09/22 12:18:05 INFO util.TimerUtil: Serializar Jackson:985ms,Counter:10001
14/09/22 12:18:05 INFO util.TimerUtil: Serializar Java:1171ms,Counter:10001
14/09/22 12:18:05 INFO util.TimerUtil: Serializar Kryo:397ms,Counter:10001
Я много раз выполняю код, и меня удивляет время десериализации для Джексона, 25000 мс ???
String
s, различия в размере (и производительности) должны быть небольшими. А для других типов данных, таких как числа с плавающей запятой, различия могут складываться. А для оценки производительности вам действительно следует взглянуть на такой инструмент, какjmh
, чтобы получить надежные цифры. Что касается десериализации Джексона, сам тестовый код должен не только выполнять прогрев (что может делатьjmh
), но и обеспечивать постоянное повторное использованиеObjectMapper
экземпляров. - person StaxMan   schedule 25.09.2014