可能重复:
Java - 判断一个字符串是否被实习?
我想要一个已被 jvm 内部化的字符串列表,或者因为它们是字面的,是因为在它们上调用了方法intern 。我怎样才能生成它?
可能重复:
Java - 判断一个字符串是否被实习?
我想要一个已被 jvm 内部化的字符串列表,或者因为它们是字面的,是因为在它们上调用了方法intern 。我怎样才能生成它?
我怎样才能生成它?
你不能在一个正在运行的程序中。没有用于迭代实习生字符串池的 API。
理论上你可以通过调试代理来做到这一点。它将涉及:
String
实例。str == str.intern()
。但是,这个过程会很昂贵,并且会污染字符串池(permgen heap),其中包含大量不必要的字符串。此外,这仅在调试代理停止所有应用程序线程时才有效,因此应用程序不能使用这种方法检查自己的字符串池。
您可以获得所有实习字符串的总大小:
$ 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
...