Предисловие
Я написал статью о разделении области памяти JVM, но вчера я получил интервью с Ant Financial. Я спросил о контенте, связанном с JVM, и объяснил разделение области памяти JVM. Эта часть была довольно хорошей, но позже я спросил, где строка хранится в Java. Я только вспомнил, что строка - это неизменное количество, которое следует хранить в постоянном пуле. Но позже я спросил, где должна быть размещена новая строка, которая должна быть помещена в кучу. Позже я спросил, где были размещены ссылки на строки. В то время я был глуп и сказал, что они также были помещены в кучу. Теперь я суммирую: данные с переменными основным типом и ссылки на объекты помещаются в стек, сам объект помещается в кучу, явные константы строки помещаются в постоянный пул, а строковые объекты помещаются в кучу.
Описание постоянного бассейна
Постоянный бассейн был ранее помещен в область метода, то есть он был в постоянном поколении и перемещался в кучу, начиная с JDK7. Это изменение можно увидеть из ** важных RFES, адресованных в JDK 7 примечаниях в версии Oracle.
Область: Hotspotsynopsis: В JDK 7 внутренние строки больше не выделяются в постоянном поколении кучи Java, а вместо этого выделяются в основной части кучи Java (известные как молодые и старые поколения), а также другие объекты, созданные применением. Это изменение приведет к большему количеству данных в основной куче Java, и меньше данных в постоянной генерации, и, следовательно, может потребовать корректировки размеров кучи. Большинство приложений увидят лишь относительно небольшие различия в использовании кучи из -за этого изменения, но более крупные приложения, которые загружают много классов или используют метод строки.
Описание местоположения памяти строковой памяти
1. Явные константы строки
String a = "holten"; string b = "holten";
• После первого предложения строковый объект со значением Holten создается в постоянном пуле;
• Когда второе предложение выполнено, потому что в постоянном пуле есть Холтен, новый строковый объект больше не создается.
• В настоящее время ссылка на строку находится в стеке виртуальных машин.
1. Стронг объект
String a = new String ("holtenobj"); string b = new String ("holtenobj");• Когда класс загружен, строковый объект со значением HoltenOBJ создается в постоянном пуле. Когда первое предложение будет выполнено, в куче будет создан новый объект строки ("Holtenobj");
• Когда второе предложение выполняется, потому что Holtenobj существует в постоянном пуле, новый строковый объект больше не создается, а новый объект String ("Holtenobj") напрямую создается в куче.
Проверять
/*** Создано Holten.gao на 2016/8/16. */public class main {public static void main (string [] args) {string str1 = "gao xiaotian"; String str2 = "gao xiotian"; System.out.println (str1 == str2); // true string str3 = new String ("Gao Datian"); String str4 = new String ("Gao Datian"); System.out.println (str3 == str4); // false}}Вернуть результат:
TrueFalse
Приведенная выше статья основана на подробном объяснении местоположений строковой памяти в Java. Это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.