Java marshaller производительность

Я использовал JAXB Marshaller, а также мой собственный marshaller для маршалинга чистых бобовых объектов Java в XML. Было замечено, что они оба требуют, чтобы почти то же время упорядочило. Производительность не приемлема и должна быть улучшена. Что такое возможные пути, где мы можем улучшить производительность marshaller? Как поточная обработка?

9
задан cbz 19 March 2010 в 18:59
поделиться

4 ответа

Дополнительное использование JibX. Как и questzen, в моих тестах производительности я обнаружил, что JibX в 9 раз быстрее, чем JAXB.

Также убедитесь, что у вас есть woodstox в пути к классам при использовании JibX. Я обнаружил, что реализация Stax от woodstox примерно на 1050% быстрее, чем реализация Stax для Java6.

5
ответ дан 4 December 2019 в 07:23
поделиться

По моему опыту, JIBX http://jibx.sourceforge.net/ был почти в 10 раз быстрее, чем JAXB. Да, я измерял производительность. Мы использовали его для связывания Java-бинов с большим HL7 xml. При этом способ повышения производительности - не полагаться на определение схемы, а писать собственные привязки.

1
ответ дан 4 December 2019 в 07:23
поделиться

Убедитесь, что вы создали экземпляр контекста JaxB только один раз, создание контекста занимает некоторое время, так как он использует отражение для анализа аннотаций объекта.

Обратите внимание, что JAXBContext является потокобезопасным, а маршаллеры \ unmarshallers - нет, поэтому вам все равно придется создавать маршаллер для каждого потока. Однако я обнаружил, что создание маршаллеров, когда у вас уже есть контекст jaxb, довольно быстро.

14
ответ дан 4 December 2019 в 07:23
поделиться

Помимо других хороших предложений, я предполагаю, что что-то не так с тем, как вы используете JAXB - в целом он достаточно хорошо работает, если:

  • Вы используете JAXB версии 2 (НИКОГДА не используйте устаревший JAXB 1 - это была ужасно медленной, бесполезной хренью); предпочтительно последняя версия 2.1.x из http://jaxb.dev.java.net
  • Убедитесь, что вы используете SAX или Stax source / destination; НИКОГДА не используйте DOM, за исключением случаев, когда это абсолютно необходимо для обеспечения совместимости: использование DOM сделает его в 3-5 раз медленнее, без каких-либо преимуществ (он просто удваивает объектную модель: POJO -> DOM -> XML; часть DOM совершенно не нужна)
  • В идеале используйте самую быструю Доступен парсер SAX / Stax; Woodstox быстрее, чем поставляемый в комплекте процессор Stax от Sun (а реф. Имп. BEA содержит ошибки, не быстрее, чем Sun)

Если JAXB все еще более чем на 50% медленнее, чем вариант, написанный вручную, я бы профилировал его, чтобы посмотреть, что еще происходит. неправильный. При правильном использовании он не должен работать медленно - я измерял его постоянно и обнаружил, что он настолько быстр, что конвертеры для рукописного ввода обычно не стоят времени и усилий.

Jibx, кстати, тоже хороший пакет, так что я не против его попробовать. Он все еще может быть немного быстрее, чем JAXB; только не 5x или 10x, когда оба используются правильно.

6
ответ дан 4 December 2019 в 07:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: