Intereting Posts
Android Alpha Fade в выпуске анимации Установите поворот с возможностью поворота в соответствии с рисунком TextView drawableLeft Получите скорость события onTouch ACTION_MOVE в Android Панель инструментов с дизайном материала EditText Не может показаться одновременно отображать как ListView, так и AdView Как преобразовать успешный орган Response к определенному типу с помощью модификации? Как получать текстовые sms на определенный порт. Какие версии Android и iOS поддерживают совместимость с Adobe AIR 3.0? Как я могу активировать кнопку «Вверх» моей ActionBar, как кнопка «Назад» телефона? Включить службы определения местоположения для Android, если пользователь не выбрал параметр «Никогда» Лучшая практика для создания нового фрагмента Android Добавление SearchView в фрагмент Обновление LinearLayout после добавления представления Перенос изображения через Bluetooth в Android Eclipse продолжает развертывание устройства в режиме отладки

Производительность Джексона JSON Parser

Несколько сообщений в Интернете указывают на Джексона как на лучшую производительность синтаксиса, чем на GSON, предоставляя где-то около 20-30% улучшения скорости.

  • http://rick-hightower.blogspot.com/2014/04/new-json-serialization-benchmark.html
  • http://tuhrig.de/jaxb-vs-gson-and-jackson/
  • http://java.dzone.com/articles/be-lazy-productive-android

Вывод нашего синтаксического анализатора GSON и замена на Jackson привели к 7-кратному замедлению моего проекта с латентностью более 300 мс за вызов. То же самое действие разбора на GSON занимает менее 50 мс.

Я просмотрел список «gotchas» на Wiki Jackson, но ничего там не выделялось как красный флаг.

  • http://wiki.fasterxml.com/JacksonDataBinding

Например, я не воссоздаю свой ObjectMapper , и я использую ObjectReader для чтения всего JSON. Вот пример кода:

 public class JsonParser { @Nonnull private final ObjectMapper objectMapper; public JsonParser() { final ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setDateFormat(DateFormatUtil.getGmtIso8601DateFormat()); SimpleModule simpleModule = new SimpleModule(); objectMapper.registerModule(simpleModule); this.objectMapper = objectMapper; } public <T> T fromJson(InputStream inputStream, Class<T> clazz) throws IOException { ObjectReader reader = objectMapper.reader(clazz); return reader.readValue(inputStream); } } 

Объект выше создается один раз и используется на протяжении всего приложения для перевода JSON в POJO. Пример POJO можно увидеть здесь:

 @JsonSerialize(include= Inclusion.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public class ActivityEntity { public ActivityObjectEntity actor; public ActivityObjectEntity object; public ActivityObjectEntity provider; public ActivityObjectEntity target; public ActivityObjectEntity generator; public String content; public String title; public String verb; public String url; public Date published; public Date updated; // other properties omitted ... } 

То, что сериализуется, на самом деле является списком вышеупомянутых элементов.

Вот мои примеры окон просмотра трассировки из каждого прогона. Заметьте, это не аномалия. Я последовательно получаю тот же порядок производительности, что и Гссон, и Джексон разбора одного и того же набора данных.

Сравнение было с Jackson 2.4.2 и Gson 2.2.4

Вывод отслеживания от JacksonВывод traceview от Gson

Код выглядит правильно, и даже в самом худшем случае Джексон должен быть не медленнее, чем Gson; И, конечно, не кратно ничто.

Если вы смогли получить снимок-профайлер для стека вызовов (для непрерывной десериализации на 10+ секунд), это, вероятно, укажет на то, где потрачено лишнее время, и может помочь выяснить виновника.

Я бы по-прежнему дважды проверял, что JsonParser не JsonParser непреднамеренно несколько раз: один сложный случай – это, например, через фреймворки, такие как Jersey (напрямую или через DropWizard), которые могут создавать ресурсы несколько раз, если не сказать, чтобы создавать и использовать экземпляры singleton. Я говорю это, потому что симптомы просто подходят для этого случая, а не потому, что я сомневаюсь, что вы не проводили должной осмотрительности.