JAX-WS - как повысить производительность при создании большого количества Java-объектов xjc? - PullRequest
2 голосов
/ 27 июля 2011

В моей схеме я определил элемент, который состоит из последовательности других элементов. Я создаю веб-сервис 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 внутри них занимает много памяти, есть ли лучший способ?

Спасибо за помощь:)

1 Ответ

0 голосов
/ 19 июля 2013

1) Посмотрите на этот блог , это может помочь вам решить вашу проблему

2) Кроме того, почему бы вам не попробовать json, он действительно быстрее вместо xml

...