Sobes.tech
Middle

Mi a különbség a verem (stack) és a heap között Java-ban? Hol tárolódnak a sztringek?

sobes.tech MI

Válasz az MI-től

В Java стек и хип — это разные области памяти с разным назначением:

  • Стек (Stack) — это область памяти, где хранятся локальные переменные методов и вызовы функций. Каждый поток имеет свой стек. Доступ к данным в стеке очень быстрый, память выделяется и освобождается автоматически при входе и выходе из методов.

  • Хип (Heap) — это область памяти, где хранятся объекты и массивы, созданные с помощью оператора new. Память в хипе управляется сборщиком мусора (Garbage Collector).

Где хранятся строки?

Строки в Java — это объекты класса String, поэтому они хранятся в хипе. При этом существует специальный пул строк (String Pool), где хранятся строковые литералы для оптимизации памяти. Этот пул тоже находится в области памяти, связанной с хипом (в современных JVM пул строк — часть хипа).

Пример:

String s1 = "hello"; // строковый литерал, хранится в пуле строк
String s2 = new String("hello"); // новый объект в хипе