Ответ
Основное место хранения объектов — куча (Heap). Это динамически выделяемая область памяти, управляемая JVM и сборщиком мусора (Garbage Collector, GC).
Детализация:
-
Куча (Heap):
- Все объекты, созданные оператором
new, размещаются здесь. - Это общая область памяти для всех потоков приложения.
- Память в куче освобождается автоматически GC, когда на объект больше нет ссылок.
MyClass obj = new MyClass(); // Ссылка 'obj' в стеке, сам объект MyClass — в куче.
- Все объекты, созданные оператором
-
Стек (Stack):
- Хранит примитивные типы (int, boolean, char и т.д.) и ссылки на объекты для локальных переменных методов.
- Каждый поток имеет свой собственный стек.
- Память освобождается сразу при выходе из области видимости (блока или метода).
public void someMethod() { int count = 10; // Примитив 'count' хранится в стеке. String localRef = "Hello"; // Ссылка 'localRef' в стеке, объект String — в куче/пуле строк. }
-
Пул строк (String Pool):
- Специальная область внутри кучи для хранения литералов строк (
String). - Обеспечивает повторное использование неизменяемых (immutable) строковых объектов.
String s1 = "literal"; // Объект может быть создан или взят из пула. String s2 = "literal"; // s2 будет ссылаться на тот же объект, что и s1. String s3 = new String("literal"); // Принудительно создает новый объект в куче.
- Специальная область внутри кучи для хранения литералов строк (