Я постараюсь ответить на свой вопрос (Киро все еще очень новый!).
У нас есть набор из примерно 120 различных веб-сервисов, реализованных с использованием Restlet Framework . Они используются клиентами веб-служб, обычно построенными на основе клиентской библиотеки Restlet. Представления, отправляемые назад и вперед между сервером и клиентом, включают XML (с использованием библиотеки сериализации XStream ), JSON (с использованием Джексона ), XHTML, Сериализация объектов Java , и по состоянию на вчерашний день Kryo . Таким образом, мы можем провести несколько последовательных сравнений.
Kryo 1.0.1 кажется достаточно стабильным. Как только я действительно прочитал о том, как использовать API, единственной реальной проблемой, которую я обнаружил, было то, что сериализатор java.util.Date по умолчанию, казалось, искажал даты через несколько месяцев в прошлом. Я просто должен был предоставить свое собственное переопределение:
kryo.register(Date.class,
new SimpleSerializer<Date>() {
@Override public void write (ByteBuffer b, Date d) { b.putLong(d.getTime()); }
@Override public Date read (ByteBuffer b) { return new Date(b.getLong()); }
});
Но это была единственная возможная проблема, которую я нашел до сих пор. У нас есть набор JavaBeans с полями String, Float, Integer, Long, Date, Boolean и List.
Вот несколько грубых ориентиров. Во-первых, я выполнил 100 000 сериализаций и десериализаций иерархии объектов, которая описывает одну телевизионную программу (т.е. сделал 100 000 ее глубоких копий). Скорости были:
XStream XML: 360/sec
Java Object Serialization: 1,570/sec
Jackson JSON: 5,000/sec
Kryo: 8,100/sec
Затем я также сериализовал каталог из 2000 описаний телевизионных программ и подсчитанных байтов:
XStream XML: 6,837,851 bytes
Jackson JSON: 3,656,654 bytes
Kryo: 1,124,048 bytes
Я также обнаружил, что регистрация сериализаторов была очень важна:
kryo.register(List.class);
kryo.register(ArrayList.class);
// ...
kryo.register(Program.class);
kryo.register(Catalog.class);
// ...
Если бы я этого не сделал, сериализация была бы почти вдвое больше, а скорость была, возможно, на 40% медленнее.
Мы также провели полное сквозное тестирование нескольких веб-сервисов, используя каждый из этих четырех методов сериализации, и они также показали, что Kryo работает быстрее, чем другие.
Итак, в общем, Kryo кажется достаточно крепким. Я собираюсь сохранить его поддержку в нашей кодовой базе, и по мере накопления опыта я надеюсь использовать его в других местах. Слава команде Kryo!
Обновление (09.03.2011): Наконец-то я нашел предложение @ StaxMan попробовать двоичный сериализатор "Smile" Джексона 1.6. Используя Jackson 1.6 и Kryo 1.04, я сделал 100 000 глубоких копий (сериализация / десериализация) несколько иной иерархии объектов телепрограмм:
XStream XML: 429/sec 5,189 bytes
Jackson JSON: 4,474/sec 2,657 bytes
Kryo: 4,539/sec 1,066 bytes
Jackson Smile: 5,040/sec 1,689 bytes
Этот тест не совмещался с тестом макроуровня, где я пробовал разные сериализаторы в веб-сервисе REST, который доставляет многие из этих объектов. Там общая пропускная способность системы поддерживает интуицию @ StaxMan о производительности:
Jackson JSON: 92 requests/sec
Jackson Smile 97 requests/sec
Kryo: 108 requests/sec