«Сегодня я узнал, что такое стек и куча и в чем разница между ними».

Куча

Стек - это область ОЗУ (оперативной памяти), которая выделяется для временных переменных, которые создаются функциями, и используется для распределения статической памяти .

Стек прикреплен к потоку, поэтому область переменных в стеке ограничена потоком, в котором они выполняются.

Он управляется процессором. Он сохраняет переменные, созданные функциями, в формате Последний вошел, первым ушел (LIFO) и освобождает всю выделенную память при выходе из функции.

Стек меньше по размеру по сравнению с кучей, но он быстрее для чтения / записи и более удобен, поскольку память управляется за вас. И стек быстрее, потому что выделение / освобождение памяти более тривиально по сравнению с кучей.

- Когда вы используете стек?
+ Когда вы знаете, сколько данных вам нужно выделить до времени компиляции, и вы хотите сохранить локальные переменные небольшого размера и вам нужно быстро получить доступ / выделить / освободить.

Куча

Куча - это область, которая занимает большую часть ОЗУ. Он используется для распределения динамической памяти.

Область действия кучи - это все приложение, к ней можно получить доступ из любой части приложения. Элементы кучи независимы друг от друга, и к ним можно получить произвольный доступ в любое время. В многопоточной среде каждый поток будет иметь свои собственные полностью независимые стеки, но они будут совместно использовать кучу.

Размер кучи ограничен только размером виртуальной памяти.

Управление кучей не выполняется ЦП так жестко, как для стека, поэтому оно немного медленнее и требует ручного выделения / освобождения и освобождения неиспользуемых частей . Если это управление не выполняется правильно, могут возникнуть такие проблемы, как утечка памяти, из-за которых некоторая часть памяти будет зарезервирована и станет недоступной для других процессов.

- Когда вы используете кучу?
+ Когда вы не знаете, сколько данных вам понадобится во время выполнения, и хотите хранить переменные большего размера, чтобы они были доступны глобально.

Отличия

Замечания по стеку и куче для Java

  • Пространство кучи Java используется для объектов и классов JRE. Каждый раз, когда создается новый объект, он сохраняется в куче.
  • Пространство кучи управляется двумя концепциями: сборка мусора и молодое поколение, старое поколение.
  • Сборка мусора выполняется в динамической памяти, чтобы освободить объекты, на которые нет ссылок.
  • Молодое поколение, старое поколение помогает приоритизировать объекты для сборки мусора, разделяя Java Heap Space на два поколения.
  • Память стека Java используется для выполнения потока.
  • Если в стеке не осталось памяти для хранения вызова функции или локальной переменной, JVM выдаст java.lang.StackOverFlowError, а если больше нет кучи space для создания объекта, JVM выдаст java.lang.OutOfMemoryError: Java Heap Space.
  • - Xss используется для определения стартового размера памяти стека каждого потока.
  • - Xms и - Xmx используются для определения минимального и максимального размеров кучи при запуске.

использованная литература









📝 Прочтите этот рассказ позже в Журнале.

👩‍💻 Просыпайтесь каждое воскресное утро и слушайте самые интересные истории из области технологий, ожидающие вас в вашем почтовом ящике. Прочтите информационный бюллетень« Примечательно в технологиях .