OutOfMemoryError に続いて、結果のヒープダンプを IBM Support Assistant の 64 ビット メモリ アナライザー (Websphere 7.0.23 で実行されている J9 VM) で処理しました。
いくつかのリーク候補がリストされました (すべてシステム クラスローダー関連) が、そのうちの 1 つは、StringBuffer で 256 の値で初期化された char[] に実際には 7700 万の null 文字が含まれていることを示しているようです。
Support Assistant からの結果の heapdump 分析は、char[77418987] @ 0xc32* * * \u0000\u0000\u0000を示しています.....
これは StringBuffer -> PatternLayout -> TimeAndSizeRollingAppender によって参照されます
保持されたヒープは、各文字に 2 バイト、配列自体に 18 バイト、合計で 150 MB 以上をチェックアウトします。
Log4j のバージョンは 1.2.16 で、simonsite の TimeAndSizeRollingAppender を使用しています (この依存関係を削除したいのですが)。
これは Support Assistant からの誤検知でしょうか、それともヒープ上で char[256] が char[77000000+] になる方法はありますか?