重複の可能性:
Java-文字列がインターンされているかどうかを教えてください。
jvmによって内部化された文字列のリストが必要です。これは、リテラルであるため、メソッドinternが呼び出されたためです。どうすれば生成できますか?
重複の可能性:
Java-文字列がインターンされているかどうかを教えてください。
jvmによって内部化された文字列のリストが必要です。これは、リテラルであるため、メソッドinternが呼び出されたためです。どうすれば生成できますか?
次のように、インターンされたすべての文字列の合計サイズを取得できます。
$ jmap -permstat 543
Attaching to process ID 543, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 19.1-b02-334
14584 intern Strings occupying 1603648 bytes.
finding class loader instances ..Warning: skipping invalid TLAB for thread t@44819
...
どうすれば生成できますか?
実行中のプログラム内ではできません。インターンされた文字列プールを反復するための API はありません。
理論的には、デバッグ エージェントを介して実行できます。それには以下が含まれます:
String
インスタンスを見つけます。str == str.intern()
。ただし、このプロセスにはコストがかかり、不必要にインターンされた多数の文字列で文字列プール (permgen ヒープ) が汚染されます。さらに、これはすべてのアプリケーション スレッドがデバッグ エージェントによって停止された場合にのみ機能するため、アプリケーションはこのアプローチを使用して独自の文字列プールを調べることはできません。