20

内部化された文字列を一覧表示できるデバッグ ツールを探していますか? 理想的には、マークを付けて、そのマークの後に追加された文字列のリストを取得したいと考えています。

前もって感謝します。

4

2 に答える 2

2

おそらく最も簡単な方法は、バイトコード ビューアを使用することです。インターンされたすべての文字列は、文字列リテラルが含まれているクラス ファイルの constant_pool に存在します"sun.awt.noerasebackground"。これは、型として定数プールに表示されます'String_info'。私が使用しているバイトコード ビューアー (およびエディターなので注意してください!) は JBE です。JBE ダウンロード

于 2011-08-02T21:42:43.530 に答える
1

最近の Hotspot VM では、インターンされた文字列は他のものと同じように見えます - 唯一の違いは、基になる char 配列が VM によって追跡されていることです (追加の JNI 参照があると思いましたが、YourKit ダンプには表示されません)調査するのは興味深い)。

そうは言っても、Yourkit は重複した文字列のメモリ インスペクションを提供します。これを「Trace Allocations」と組み合わせると、これらの文字列を割り当てたコードに直接アクセスできます。

http://www.yourkit.com/docs/95/help/inspections_mem.jsp#duplicate_stringsを参照してください

--

2 つの時点の間に追加された文字列のリストを取得する方が簡単です。

  1. jmap またはお気に入りのプロファイラーを使用して 2 つのヒープダンプを取得します
  2. ヒープの差分を実行する
  3. String クラスのすべてのインスタンスを表示します

どのプロファイラーでも jhat でも実行できるはずです (十分な忍耐力がある場合)。YourKit を使用すると、ブックマーク機能を使用して、ヒープ スナップショットを 1 つだけ取得できます。

于 2011-07-17T14:23:26.320 に答える