В моей схеме я определил элемент, который состоит из последовательности других элементов. Я создаю веб-сервис JAX-WS, поэтому я генерирую Java-классы из моей схемы, используя xjc.
Как только классы сгенерированы, у меня в обработчике службы есть цикл, который создает несколько тысяч экземпляров одного из этих сгенерированных классов, и у каждого экземпляра есть метод getItems (), который возвращает List, и я добавляю несколько элементов к каждому.
XML-ответ выглядит примерно так:
<MyElement>
<Item name="item1">texthere</Item>
<Item name="item2">texthere</Item>
<Item name="item3">texthere</Item>
<Item name="item4">texthere</Item>
</MyElement>
<MyElement>
<Item name="item1">texthere</Item>
<Item name="item2">texthere</Item>
<Item name="item3">texthere</Item>
<Item name="item4">texthere</Item>
</MyElement>
и т.д.
Этот элемент появляется несколько тысяч раз.
Мой вопрос касается производительности:
Как я могу уменьшить количество времени, необходимое для генерации этих объектов и возврата XML-ответа? В настоящее время это занимает около 40 секунд для 50 000 экземпляров MyElement. Каждый MyElement на самом деле имеет около 10 элементов Item, поэтому в общей сложности насчитывается около 500 000 объектов. Я выполнил некоторое профилирование и обнаружил, что примерно 10-15 секунд этого происходит при маршалинге объектов и 15-20 секунд, чтобы добавить их в сетевой поток.
Есть ли способ уменьшить использование памяти? Создание всех этих экземпляров объекта jaxb для каждого MyElement, а также каждого элемента Item внутри них занимает много памяти, есть ли лучший способ?
Спасибо за помощь:)