Я работаю над серверным приложением Spring. Мы используем JAXB, SOAP и Axiom (завернутые в Spring WS), которые маршалируют/деактивируют XML-сообщения с помощью Woodstox, но наше приложение имеет проблемы с обработкой мусора. Мы отправляем только 165 Mb сообщение, но Marshaller производит около 920 Mb мусора. Может быть, кто-то знает, почему размер собранного мусора настолько велик, и как я могу это улучшить?Почему Вудсток занимает столько памяти?
ответ
Woodstox сам по себе не производит весь этот мусор, поскольку он сохраняет только небольшой набор состояний для поддержки потокового доступа. Основные создаваемые объекты будут только строковыми значениями, создаваемыми, и даже теми, которые доступны только при доступе.
Но привязка данных к тому же, предоставленная Axiom, должна сохранять гораздо более обширное состояние и создавать объектную модель для экспонирования. Поэтому я ожидаю, что он будет производить значительно много недолговечных объектов. И это также обычно делает доступ к каждому значению XML-документа, материализуя все строки. Учитывая это, я согласен с @SpaceTrucker в том, что для генерации ненужного количества ненужного количества мусора. И краткосрочный мусор не часто бывает проблематичным, по сравнению с живыми объектами, которые живут в старом поколении.
Вы пытались взять кучу кучи, чтобы посмотреть, какие объекты производятся?
Если вы не страдаете расширением сущности xml, я бы не назвал это большим количеством мусора, так как он всего в 5,5 раз больше, чем вход. В зависимости от конкретного сообщения может быть создано множество экземпляров, у которых есть накладные расходы. Кроме того, одинаковые строки могут быть созданы несколько раз из одной и той же части файла xml. – SpaceTrucker
Лучше всего было бы сделать кучу кучи, чтобы узнать, кто такие преступники и какие объекты они есть. – LudgerP
Вы также должны добавить дополнительный контекст к своему вопросу. Это на стороне клиента или сервера? Является ли большое сообщение запросом или ответом? Используете ли вы привязку данных, такую как JAXB2? И т.п. –