Я ищу инструмент отладки, который может перечислить строки, которые были интернализованы? В идеале я хотел бы поставить отметку и иметь список строк, которые были добавлены после этой отметки.
Заранее спасибо.
Я ищу инструмент отладки, который может перечислить строки, которые были интернализованы? В идеале я хотел бы поставить отметку и иметь список строк, которые были добавлены после этой отметки.
Заранее спасибо.
Возможно, самый простой способ — использовать программу просмотра байт-кода. Любая интернированная строка будет присутствовать в пуле констант файла класса, в который включен литерал строки. Например, в недавнем файле класса из другого вопроса StackOverflow, на который я ответил, в моем коде был следующий литерал строки: "sun.awt.noerasebackground"
. Это отображается в пуле констант как тип 'String_info'
. Средство просмотра байт-кода (и редактор, будьте осторожны!), которым я пользуюсь, — это JBE. Загрузка JBE
На недавней виртуальной машине Hotspot интернированные строки выглядят так же, как и любые другие — единственная разница в том, что базовый массив символов отслеживается виртуальной машиной (я думал, что у нее есть дополнительная ссылка JNI, но она не отображается в дампе YourKit — будет интересно исследовать)
Тем не менее, Yourkit обеспечивает проверку памяти на наличие дублирующихся строк, что, я считаю, делает то, что вам нужно. Если вы объедините его с «Trace Allocations», вы можете перейти прямо к коду, который выделил эти строки.
См. http://www.yourkit.com/docs/95/help/inspections_mem.jsp#duplicate_strings
--
Получить список строк, добавленных между двумя моментами времени, проще:
Должно быть выполнимо с любым профилировщиком или даже jhat (если вы достаточно терпеливы). Если вы используете YourKit, вы можете использовать функцию закладки и сделать только один снимок кучи.
(this==this.intern())?("^"+toString()):toString()
. Можете ли вы объяснить, для чего вам нужен инструмент? Это потому, что вы полагаетесь на проверку на равенство, или вы смотрите на использование памяти, или... - person Ed Staub   schedule 08.07.2011