IBM JVM で作成した .phd ダンプを Eclipse MAT で解析しています。
「gc_roots」という名前のビューには、次のリストが表示されます。
GC ルートのリストが完全であることを確認できますか?
実行中のスレッドのスタック内のすべてのローカル変数が「不明」セクションに含まれているということですか?
なぜそのような名前が付けられたのですか?
GC ルート リストの完全性に関する私の疑問は、OOM がスローされた時点でヒープにいくつかのかなり大きな弱参照 char バッファーが含まれているという事実に基づいています。SoftReferences も OOM の前にクリアする必要があるため、これは契約違反のようです。
アップデート
これは、同時に書かれたコア ダンプからの GC ルートのリストです。
「Unknown」セクションはありませんが、代わりに「JNI Global」が表示されます。そして、スタックのローカル変数がどこにあるのか、まだ疑問に思っています。