Почему объекты Java размещены в куче?

Цитата из Википедии: «Куча - это полезная структура данных, когда вам нужно удалить объект с наивысшим (или самым низким) приоритетом».

Я знаком с тем, что такое куча, и с типами проблем, которые я могу с ними решить, но мне было интересно, почему эта структура данных используется для распределения объектов в Java? Кроме того, что определяет приоритет объекта?

Вы думаете о структуре данных, но куча в данном случае означает просто хранилище памяти. Раньше это называлось так, потому что блоки памяти были организованы структурой данных кучи.

Hitobat 29.04.2018 11:03

Вы путаете акуча и вкуча. Это омоним.

Boris the Spider 29.04.2018 11:03

Ого, я подумал, что куча - это куча. Спасибо за ответы!

Luca 29.04.2018 11:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
345
2

Ответы 2

Я объясню это со ссылкой на C++. У вас есть локальные переменные, которые создаются в стеке при инициализации переменной и уничтожаются при выходе из блока. В основном это означает, что каждая локальная переменная находится внутри кадра стека блока. Следовательно, умирает блок, умирает переменная.

Если вы не знаете заранее, насколько большим будет ваш объект, вам нужно выделить память в куче. Примером может служить массив с динамически изменяемым размером. В C++ это делается с помощью оператора «new» (или malloc, calloc, realloc и т. д.). В Java это тоже делается с помощью оператора «новый». Это означает, что вы несете ответственность за создание и освобождение памяти.

Объекты в куче не просто уничтожаются, когда вы покидаете блок. За исключением того, что вы определяете его в своей основной функции, и после этого программа завершается. В C++ вы либо вызываете delete, либо free (), чтобы освободить созданную память вашего объекта кучи. В Java же сборщик мусора делает это за вас. Он делает это, в основном ведя счетчик ссылок на экземпляр (конечно, это немного сложнее).

Цитируемый текст относится к разновидности структура данных, называемой кучей.

Слово «куча» также используется для обозначения управление динамической памятью.

Это случай, когда одно слово в английском языке IT имеет два разных и независимых значения. (Это довольно распространенное явление в нормальном английском ...)


I was wondering why this data structure is the one used for the allocation of Objects in Java?

Просто это не так. Куча динамической памяти (например, куча Java) не организована с использованием структуры данных кучи.

Фактически, куча Java на самом деле вообще не является структурой данных. Скорее это область памяти, в которой размещаются объекты. Освобождение пространства осуществляется путем отслеживания объектов достижимый, а затем удаления оставшихся объектов и объединения оставшегося пространства.

В отличие от этого, куча C или C++ не может быть отслежена и консолидирована (потому что недостаточно надежной информации о типе, чтобы можно было однозначно идентифицировать указатели). Поэтому куча C / C++ будет включать структуру данных для организации свободного пространства. Однако это не структура данных кучи в смысле цитируемого текста. Обычно это массив списков «узлов» одинакового размера.

Другие вопросы по теме