Распределение памяти строк в Java - PullRequest
2 голосов
/ 12 ноября 2010

В классе сервлетов у меня есть проверки

if ("Mail" .equals (request.getParameter (mode)) || "Chat" .equals (request.getParameter (mode))){}

Мой вопрос касается памяти, выделенной для строк «Почта» и «Чат».Будет ли он создавать новые строковые объекты для каждого запроса к сервлету.А как насчет GC?

1 Ответ

6 голосов
/ 12 ноября 2010

Нет, он не будет каждый раз создавать новый объект.Строковые константы interned - они создаются один раз и помещаются в специальный пул.

Мало того, что он не только не создаст новую строку при каждом запуске кода, но и при использованииконстанты "Mail" или "Chat" в других местах вашего кода, они также будут использовать те же строковые объекты.

Из спецификации языка Java section 3.10.5 :

Каждый строковый литерал является ссылкой (§4.3) на экземпляр (§4.3.1, §12.5) класса String (§4.3.3).Строковые объекты имеют постоянное значение.Строковые литералы или, в более общем смысле, строки, являющиеся значениями константных выражений (§15.28), являются "интернированными", чтобы совместно использовать уникальные экземпляры, используя метод String.intern.

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