Некоторые запросы относительно пула строк Java - PullRequest
2 голосов
/ 06 сентября 2010

У меня есть следующие запросы относительно пула строк Java:

  1. Является ли это частью кучи Java, является ли она частью собственной кучи JVM? Согласно моему пониманию, это первая.

  2. Есть ли у нас какие-либо ограничения на размер этого пула строк? Или это настраивается пользователем?

  3. В следующих двух утверждениях

    String str = "Stack";
    String str2 = str.concat("overflow");
    

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

4. Я предполагаю, что размер пула строк фиксирован, что произойдет, если этот пул строк будет полностью занят? Будет ли gc очищать пул строк? Или JVM может расширить размер пула строк?

1 Ответ

1 голос
/ 06 сентября 2010

В текущей реализации Sun / Oracle встроенные строки будут находиться в постоянной генерации кучи Java вместе с данными классов. Нет отдельной области памяти для строк.

Максимальный размер этой области настраивается с помощью параметра командной строки (-XX:MaxPermGen или что-то).

Обычно concat создает новый объект String, выделенный как любой другой.

Если PermGen заполнится, вы получите OutOfMemoryError. GC обычно работает на PermGen, но реже.

Все это может быть изменено между реализациями и версиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...