Распределение памяти в Java: все, что вам нужно знать в 2022 году

Опубликовано: 2021-01-10

Выделение памяти в Java относится к процессу, в котором компьютерные программы и службы выделяются в области виртуальной памяти. Виртуальная машина Java делит память на Stack и Heap Memory. Для виртуальной машины Java выполнение приложения в максимально возможной степени может происходить из памяти стека и кучи. Каждый раз, когда объявляется новая переменная или объект, память выделяет память, предназначенную для таких операций.

Оглавление

Память стека

Распределение Stock Memory в java используется для статической памяти и выполнения потоков. Значения, содержащиеся в этой памяти, являются временными и ограничены определенными методами, поскольку на них продолжают ссылаться в режиме «последним пришел — первым вышел».

Как только вызывается память и в памяти стека создается новый блок, память стека затем содержит примитивные значения и ссылки до тех пор, пока метод не продолжится. После его окончания блок сбрасывается и доступен для нового процесса. В общем, общий размер памяти стека незначителен по сравнению с памятью кучи.

Научитесь создавать приложения, такие как Swiggy, Quora, IMDB и другие.

Характеристики памяти стека

Основываясь на различных разделах распределения памяти в виртуальной машине Java (JVM) , вот некоторые из дискретных функций стековой памяти:

  • Память стека может увеличиваться или уменьшаться по мере вызова и возврата любых новых методов.
  • Любая переменная в стеке может работать, пока существует область действия метода.
  • Он получает автоматическое выделение и освобождение по мере выполнения метода.
  • В случае переполнения памяти срабатывает ошибка java.lang.StackOverFlowError.
  • Это быстрее в доступе по сравнению с памятью кучи.

Читайте: Полный стек против инженера-программиста: что выбрать?

Методы, используемые при выделении памяти стека в java

  • Object push (элемент объекта): здесь элемент помещается на вершину стека.
  • Object pop(): любой элемент, расположенный на вершине стека, сбрасывается и возвращается. В случае, если стек пуст при вызове pop(), возникает исключение — EmptyStackException.
  • Object peek(): Здесь верхний элемент возвращается, но не подвергается очистке.
  • Булево значение empty(): если в стеке цикла нет верхнего значения, функция возвращает 1 (истина), в противном случае 0 (ложь).
  • В поиске (элемент объекта): это используется, чтобы понять, присутствует ли объект в стеке. В случае, если значение найдено, функция возвращает расположение элемента с вершины стека, в противном случае возвращает -1.

Читайте: Java-проекты и темы для начинающих

Пространство кучи Java

Пространство кучи Java, в основном используемое средой выполнения Java, вступает в игру каждый раз, когда объект создается и размещается в нем. Дискретная функция, такая как сборка мусора, продолжает сбрасывать память, используемую предыдущими объектами, которые не содержат ссылок. Для объекта, созданного в Heap Space, может быть свободный доступ через приложение.

Распределение памяти в java разделено на части, а именно куча, стек, код и статика.

Характеристики памяти кучи Java

  • Доступен из сложной техники управления памятью, включая молодое поколение, старое или постоянное поколение и постоянное поколение.
  • В динамической памяти, когда она заполняется, возвращается java.lang.OutOfMemoryError.
  • Доступ к этой памяти сравнительно медленнее, чем к памяти стека.
  • Он не подвергается автоматическому освобождению и требует аналогичной функции, такой как сборщик мусора, для удаления посторонних объектов, чтобы память работала на оптимальном этапе.

Пример распределения памяти стека и кучи в java :

Источник

Пространство кучи и память стека: фундаментальные различия

Куча памяти Память стека
Все части приложения вызывают динамическую память. Выполнение стека памяти ограничено одним потоком.
Каждый раз, когда создается объект, он сохраняется в куче. Память стека содержит только его ссылку и локальные примитивные переменные.
Объекты здесь доступны глобально через приложение. Другие потоки не могут получить доступ к объектам памяти стека.
Здесь память определяется по молодому и старому поколениям. Управление памятью происходит по принципу «последним пришел – первым обслужен».
Память остается в соответствии с областью применения. Память временна.
Такие методы, как XMX и XMS JVM, используются для определения оптимального размера кучи памяти. Для стековой памяти она определяется методом -XSS.
Здесь исключение java.lang.OutOfMemoryError происходит в случае полной памяти. Здесь ошибка java.lang.StackOverFlowError возникает, если память заполнена.
Размер больше, но требует времени для обработки по сравнению с памятью стека. Размер меньше, но быстрее в исполнении для плавной операции LIFO.

Читайте также: Зарплата Java-разработчика в Индии

Изучайте онлайн-курсы по программному обеспечению от лучших университетов мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

Заключение

Выделение памяти в java происходит двумя способами, в основном, в стеке и в куче. Мы надеемся, что это помогло вам понять процесс всего этого.

Если вам интересно узнать больше о разработке программного обеспечения с полным стеком, ознакомьтесь с программой Executive PG upGrad и IIIT-B в разработке программного обеспечения с полным стеком, которая предназначена для работающих профессионалов и предлагает более 500 часов тщательного обучения, более 9 проектов, и задания, статус выпускника IIIT-B, практические практические проекты и помощь в трудоустройстве в ведущих фирмах.

Как происходит управление памятью в Java?

Виртуальная машина Java (JVM) — это компьютерная программа, используемая для запуска программ, написанных на языке программирования Java. Это делает процесс использования управления памятью эффективным. Кроме того, он разработан таким образом, чтобы даже в случае сбоя операционной системы программа, работающая на JVM, не пострадала. Управление памятью означает управление каждой частью памяти (ОЗУ) в компьютерной системе. JVM отслеживает выделение и освобождение памяти при необходимости. Как только программа загружается в память, JVM выделяет для нее место в памяти. Этот процесс называется кучей. Куча — это общее пространство памяти для многих частей приложения.

Что такое сборка мусора в Java?

Виртуальная машина Java (JVM) использует подсчет ссылок для отслеживания количества объектов Java. Прежде чем какой-либо объект может быть собран, количество ссылок на этот объект должно достичь нуля. Пользовательская программа может явно удалять объекты, вызывая метод finalize(). Finalize — это статический метод класса Object, который вызывается сборщиком мусора (GC). Метод Finalize освободит все ресурсы объекта, прежде чем сборщик мусора позаботится об этом объекте. Сборщик мусора — это процесс очистки ненужных объектов. Процесс сборщика мусора будет запущен, когда система времени выполнения Java обнаружит, что куча Java почти заполнена. Каждый объект имеет растровое изображение в JVM. Растровое изображение устанавливается для каждого объекта, чтобы отслеживать, использовался ли он или нет. Когда растровое изображение становится равным 0, GC позаботится об этом объекте.

Каковы особенности языка программирования Java?

Язык программирования Java — это язык программирования высокого уровня общего назначения, который используется для создания приложений и апплетов. Программное обеспечение Java может работать на любой платформе, поддерживающей Java, без перепрограммирования. Особенности языка программирования Java: объектно-ориентированные функции, надежность, высокий уровень безопасности и независимость от платформы, бесплатность, простота изучения и использования. Java — это объектно-ориентированный язык программирования, который не зависит от платформы и может использоваться на любой ОС или платформе. Java является скомпилированным языком, и создается байт-код, который затем выполняется на виртуальной машине Java.