Есть ли смысл в создании пула объектов Dom4J SaxReader?

Я использую Dom4J 1.4.2.

Прямо сейчас мой код создает новый SaxReader каждый раз, когда я хочу разобрать новый XML-документ:

SAXReader reader = new SAXReader(  );

Есть ли смысл в создании пула объектов SaxReader и простом их повторном использовании? Какие накладные расходы связаны с созданием нового SaxReader при каждом вызове?

Мой код может получить один из пула, проанализировать документ, а затем вернуть его в пул для использования другим потоком.


person braveterry    schedule 13.02.2009    source источник


Ответы (1)


Как и со всеми так называемыми проблемами производительности и призывами к объединению объектов: вы испытываете реальную проблему или пытаетесь преждевременно оптимизировать здесь? Создание собственного пула в Java было из мода как минимум с 2005 года.

Я просмотрел исходный код SAXReader., а это конструктор:

  138       public SAXReader() {
  139       }

Здесь нет инициализаторов экземпляров, и основная работа выполняется в методе read.

person eljenso    schedule 13.02.2009
comment
В то время как выполнение надлежащего профилирования перед оптимизацией кода является правильным подходом, ваша оценка затрат на создание SAXReader неверна и вводит в заблуждение. Создание SAXReader вполне может оказаться дорогостоящей операцией. Конструктор просто пустой, потому что читатель инициализируется в методе read(), если приватное поле XMLReader равно null. Создание этого экземпляра XMLReader может привести к сканированию пути к классам! См. также: ibm.com/developerworks/library/x-perfap2. html/#повторное использование - person Mathias Henze; 25.11.2015