Запись XML-данных в OutputStream с изменяемыми объектами в Java - PullRequest
0 голосов
/ 22 июля 2011

Каков наилучший способ записи XML в OutputStream (TCP-сокет) без создания / создания слишком большого количества неизменяемых объектов?

Итак, у меня есть данные в ConcurrentHashMap. Я хочу зациклить эти данные, создать собственный XML и затем записать XML в OutputStream. Этот процесс будет повторяться, и поэтому я не хочу создавать слишком много объектов во время процесса преобразования / записи, чтобы GC не слишком загружался.

Я смотрел на JAXB и XStream, чтобы упростить преобразование Map в XML, но похоже, что с XMLAdapter в JAXB и подходом Convertor в XStream, я в конечном итоге получу объекты, созданные в процессе преобразования.

Я тоже готов кататься. Мне нужно решение, в котором я бы использовал повторно изменяемые объекты.

Я мог бы использовать StringBuffer и объединить все (теги XML и мои данные) с помощью метода append, а затем выполнить mystringBuffer.toString (). GetBytes () и записать байтовый массив в outputtream. В этом подходе я мог бы повторно использовать StringBuffer и ByteBuffer. Только bytearray будет новым объектом каждый раз.

Любой другой подход?

Похоже, я забегаю вперед и предполагаю, что у памяти / GC могут быть проблемы - я могу быть совершенно неправ, и простое использование JAXB или XStream может быть решением. Затем я мог бы просто провести тестирование производительности, чтобы выяснить узкое место.

Спасибо

1 Ответ

1 голос
/ 27 декабря 2011

Согласна с комментарием скаффмана:

Я не думаю, что вы уделяете должное внимание сборщику мусора - это очень хорошо справляется с большим количеством недолговечных объектов. Не беспокойтесь о создании объекта, пока не увидите фактическое проблема с производительностью. Этот вопрос звучит как классический случай преждевременной оптимизации.

Так что да, я бы также провёл некоторое тестирование производительности, чтобы увидеть, есть ли даже узкое место, которое вам нужно беспокоиться.

(Прежде всего, публикуя этот ответ, пытаясь либо получить на этот вопрос дополнительное внимание / конкурентные ответы, либо, по крайней мере, просто удалить его из растущего списка вопросов без ответа.)

...