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




Я объясню это со ссылкой на 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++ будет включать структуру данных для организации свободного пространства. Однако это не структура данных кучи в смысле цитируемого текста. Обычно это массив списков «узлов» одинакового размера.
Вы думаете о структуре данных, но куча в данном случае означает просто хранилище памяти. Раньше это называлось так, потому что блоки памяти были организованы структурой данных кучи.