Я использовал JAXB Marshaller, а также мой собственный marshaller для маршалинга чистых бобовых объектов Java в XML. Было замечено, что они оба требуют, чтобы почти то же время упорядочило. Производительность не приемлема и должна быть улучшена. Что такое возможные пути, где мы можем улучшить производительность marshaller? Как поточная обработка?
Дополнительное использование JibX. Как и questzen, в моих тестах производительности я обнаружил, что JibX в 9 раз быстрее, чем JAXB.
Также убедитесь, что у вас есть woodstox в пути к классам при использовании JibX. Я обнаружил, что реализация Stax от woodstox примерно на 1050% быстрее, чем реализация Stax для Java6.
По моему опыту, JIBX http://jibx.sourceforge.net/ был почти в 10 раз быстрее, чем JAXB. Да, я измерял производительность. Мы использовали его для связывания Java-бинов с большим HL7 xml. При этом способ повышения производительности - не полагаться на определение схемы, а писать собственные привязки.
Убедитесь, что вы создали экземпляр контекста JaxB только один раз, создание контекста занимает некоторое время, так как он использует отражение для анализа аннотаций объекта.
Обратите внимание, что JAXBContext является потокобезопасным, а маршаллеры \ unmarshallers - нет, поэтому вам все равно придется создавать маршаллер для каждого потока. Однако я обнаружил, что создание маршаллеров, когда у вас уже есть контекст jaxb, довольно быстро.
Помимо других хороших предложений, я предполагаю, что что-то не так с тем, как вы используете JAXB - в целом он достаточно хорошо работает, если:
Если JAXB все еще более чем на 50% медленнее, чем вариант, написанный вручную, я бы профилировал его, чтобы посмотреть, что еще происходит. неправильный. При правильном использовании он не должен работать медленно - я измерял его постоянно и обнаружил, что он настолько быстр, что конвертеры для рукописного ввода обычно не стоят времени и усилий.
Jibx, кстати, тоже хороший пакет, так что я не против его попробовать. Он все еще может быть немного быстрее, чем JAXB; только не 5x или 10x, когда оба используются правильно.