[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-core-chto-takoe-pul-strok":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},57,"chto-takoe-pul-strok",2,"java-core","Java Core","☕","Что такое пул строк?","Пул строк – это набор строк, хранящийся в Heap.\n\n+ Пул строк возможен благодаря неизменяемости строк в Java и реализации идеи интернирования строк;\n+ Пул строк помогает экономить память, но по этой же причине создание строки занимает больше времени;\n+ Когда для создания строки используются `\"`, то сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка на неё;\n+ При использовании оператора `new` создаётся новый объект `String`. Затем при помощи метода `intern()` эту строку можно поместить в пул или же получить из пула ссылку на другой объект `String` с таким же значением;\n+ Пул строк является примером паттерна «Приспособленец» (Flyweight).\n\nНачиная с Java 9, в рамках оптимизации Compact Strings (JEP 254) внутреннее представление строк было изменено: вместо массива `char[]` (где каждый символ занимает 2 байта) используется массив `byte[]` с дополнительным полем `coder`, которое указывает кодировку (Latin-1 или UTF-16). Если строка содержит только символы Latin-1 (а это подавляющее большинство строк в типичных приложениях), она хранится в 1 байт на символ, что существенно экономит память. Эта оптимизация применяется и к строкам в пуле.","","junior",[15,16,17],"core","memory","string",[],null,{"title":21,"description":22,"ogTitle":21,"ogDescription":23,"keywords":24,"schemaAnswer":33,"featuredSnippetReady":34},"Пул строк (String Pool) в Java — Gymterview","Что такое пул строк в Java: хранение в Heap, интернирование, экономия памяти, паттерн Flyweight. Compact Strings в Java 9 и метод intern().","Пул строк — набор строк в Heap, экономящий память за счёт повторного использования одинаковых строковых объектов.",[25,26,27,28,29,30,31,32],"пул строк","String Pool","Java","интернирование","intern","Flyweight","Compact Strings","Heap","Пул строк — набор строк, хранящийся в Heap. Возможен благодаря неизменяемости строк. При создании строки через литерал сначала ищется строка с таким же значением в пуле; если найдена — возвращается ссылка на неё. При использовании new создаётся новый объект, который можно поместить в пул методом intern(). Пул строк — пример паттерна Flyweight. С Java 9 строки хранятся в byte[] вместо char[] (Compact Strings).",true]