Подтвердить что ты не робот

Сбор мусора строковых литералов в Java 6 и Java 7 (Oracle Jdk)

Согласно знаменитой книге Голова первая Java Страница 661:

"Garbage Collector doesn't go inside String pool."

После прочтения подобных вопросов по SO я нашел смешанные ответы, например:

Мои вопросы:

  1. Как были строковые литералы, собранные на Java 6 и до

  2. И поскольку в Java 7, строковые литералы будут созданы в куче, как сбор мусора строковых литералов будет отличаться в Java 7 по сравнению с java 6?

4b9b3361

Ответ 1

Строковые литералы интернированы. В Java 7, HotSpot JVM помещает интернированные строки в кучу, а не подменю.

До java 7, hotspot помещает интернированные строки в пермг. Тем не менее, интернированные строки в пермгене были собраны мусором. По-видимому, объекты класса в permgen также можно собирать, поэтому все в permgen можно собирать, хотя сборка подписок может не включаться по умолчанию в некоторых старых JVM.

Строковые литералы, будучи интернированными, будут ссылкой, содержащейся в объявлении объекта класса объекту String в станем пуле. Таким образом, интернированная буквальная строка будет собрана только в том случае, если объект класса, который ссылался на него, также был собран.

Поднято из: (Источник).