2012-05-02 38 views
2

私は、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呼び出しを実行しないように、私は疑問に思って。ありがとう!

答えて

0

いいえ、この拡張要求にはこれ以上の動きはありません。

私はLIMIT_BUFFER = trueにします。パフォーマンス上の問題があると思われるものと同様に、プロファイラを使用してアプリケーションを実行し、心配するものが本当にあるかどうかを確認してください。多くのオプションがあります。私はYourKitをオープンソース開発者に無料で提供しているので、私はYourKitを使用します。

関連する問題