私は、BodyContentImplの非効率性とcb空間の割り当て方法について、Apacheでいくつかのバグレポートを読んでいます。 (private char[] cb;
)タグが50KBのHTMLを書き出す場合、バッファサイズは512バイトから50KBに増えます。割り当てが必要になるたびに新しいchar []が作成され、2つのSystem.arraycopy
が呼び出されます。Tomcatを使用してBodyContentImpl jspタグのメモリリークの修正がありますか?
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
呼び出しを実行しないように、私は疑問に思って。ありがとう!