2015-01-15 10 views
0

Я работаю над серверным приложением Spring. Мы используем JAXB, SOAP и Axiom (завернутые в Spring WS), которые маршалируют/деактивируют XML-сообщения с помощью Woodstox, но наше приложение имеет проблемы с обработкой мусора. Мы отправляем только 165 Mb сообщение, но Marshaller производит около 920 Mb мусора. Может быть, кто-то знает, почему размер собранного мусора настолько велик, и как я могу это улучшить?Почему Вудсток занимает столько памяти?

+0

Если вы не страдаете расширением сущности xml, я бы не назвал это большим количеством мусора, так как он всего в 5,5 раз больше, чем вход. В зависимости от конкретного сообщения может быть создано множество экземпляров, у которых есть накладные расходы. Кроме того, одинаковые строки могут быть созданы несколько раз из одной и той же части файла xml. – SpaceTrucker

+0

Лучше всего было бы сделать кучу кучи, чтобы узнать, кто такие преступники и какие объекты они есть. – LudgerP

+0

Вы также должны добавить дополнительный контекст к своему вопросу. Это на стороне клиента или сервера? Является ли большое сообщение запросом или ответом? Используете ли вы привязку данных, такую ​​как JAXB2? И т.п. –

ответ

0

Woodstox сам по себе не производит весь этот мусор, поскольку он сохраняет только небольшой набор состояний для поддержки потокового доступа. Основные создаваемые объекты будут только строковыми значениями, создаваемыми, и даже теми, которые доступны только при доступе.

Но привязка данных к тому же, предоставленная Axiom, должна сохранять гораздо более обширное состояние и создавать объектную модель для экспонирования. Поэтому я ожидаю, что он будет производить значительно много недолговечных объектов. И это также обычно делает доступ к каждому значению XML-документа, материализуя все строки. Учитывая это, я согласен с @SpaceTrucker в том, что для генерации ненужного количества ненужного количества мусора. И краткосрочный мусор не часто бывает проблематичным, по сравнению с живыми объектами, которые живут в старом поколении.

Вы пытались взять кучу кучи, чтобы посмотреть, какие объекты производятся?