如何列出在jvm中内部化的字符串? [重复]

|                                                                                                                   这个问题已经在这里有了答案:                                                      
已邀请:
您可以通过以下方式获取所有实习生字符串的总大小:
$ 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
实例。 对于每个,测试if2ѭ。 但是,此过程将很昂贵,并且将使用许多不必要地插入了字符串的字符串来污染字符串池(permgen堆)。此外,这仅在调试代理已停止所有应用程序线程的情况下起作用,因此应用程序无法使用此方法检查其自己的字符串池。     

要回复问题请先登录注册