Есть ли исправление утечки памяти в jsp теге BodyContentImpl при использовании Tomcat?

Я прочитал некоторые отчеты об ошибках в Apache о неэффективности BodyContentImpl и о том, как он распределяет пространство cb. (private char[] cb;) Если тег записывает 50 КБ HTML, размер буфера будет увеличиваться с 512 байт до 50 КБ, каждый раз, когда требуется выделение, он создает новый символ [] и выполняет два System.arraycopy звонки.

https://issues.apache.org/bugzilla/show_bug.cgi?id=43925

В этих отчетах об ошибках говорится, что ошибка была перемещена в очередь для Tomcat 7, но в примечаниях к выпуску я пока ничего не вижу. Кто-нибудь смог обойти эту проблему, используя Tomcat за это время?

Я прочитал о LIMIT_BUFFER=true. Они говорят, что при установке этого флага наблюдается снижение производительности. Код освободит текущий sb и перераспределит новый обратно в 512 байт.

public void clear() throws IOException {
467           if (writer != null) {
468               throw new IOException();
469           } else {
470               nextChar = 0;
471               if (LIMIT_BUFFER && (cb.length > Constants.DEFAULT_TAG_BUFFER_SIZE)) {
472                   bufferSize = Constants.DEFAULT_TAG_BUFFER_SIZE;
473                   cb = new char[bufferSize];
474               }
475           }
476       }

Если этот код вызывается несколько раз в одном и том же запросе, это может вынудить вас начать сначала с небольшого буфера и в конечном итоге создать больше cb для сбора мусора.

В отчете об ошибках есть предложенные изменения, но мне интересно, если кто-нибудь реализовал что-то, чтобы исправить эту проблему, чтобы он не генерировал так много потраченных строк и выполнял так много System.arraycopy звонки. Спасибо!

1 ответ

Нет, по этому запросу улучшения больше не было.

Я бы пошел с LIMIT_BUFFER=true. Как и во всем, что, по вашему мнению, может иметь проблемы с производительностью, запустите ваше приложение через профилировщик, чтобы посмотреть, есть ли что-то, о чем можно беспокоиться. Есть много вариантов. Я использую YourKit, так как они дают бесплатные копии разработчикам с открытым исходным кодом.

Другие вопросы по тегам