可能是重复问题:
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可以迭代intern'd字符串池。
理论上,您可以通过调试代理来完成。 这将涉及以下步骤:
String
实例。str == str.intern()
是否成立。然而,这个过程会非常昂贵,并且会污染字符串池(permgen堆)中不必要的大量字符串。此外,只有在调试代理停止了所有应用程序线程时,才能使用此方法检查其自己的字符串池。