Возможный дубликат:
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) большим количеством строк, которые были интернированы без необходимости. Кроме того, это работает только тогда, когда все потоки приложения остановлены агентом отладки, поэтому приложение не может использовать этот подход для проверки собственного пула строк.