Почему кучи используются для управления ссылками на объекты в Java? - PullRequest
0 голосов
/ 16 октября 2018

Функции и переменные хранятся в стеке, а ссылки на строки и объекты хранятся в куче.Почему существует разница в том, как они хранятся?

1 Ответ

0 голосов
/ 16 октября 2018

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

В сложном мире, таком как Java, не все так просто, но я все еще думаю о стеке на ассемблере, где я впервые с ним столкнулся.(Я старый.) Достаточно близко для этого обсуждения.

Куча другая.Куча - это управляемая память со сложными структурами, которые отслеживают используемую вами память.Если вы говорите new Foo (), Java знает, насколько велик Foo, и запрашивает кучу места, достаточного для его хранения.Гораздо более сложные вещи происходят вокруг управления этим.Но когда ваш метод возвращается, этот объект все еще существует.Если бы он был размещен в стеке, возникли бы реальные проблемы, потому что стек возвращается к концу, когда ваш метод возвращается.Но ваша память в куче все еще распределена, и ваш объект может продолжать существовать.

Опять же, это не так просто, но, возможно, это имеет смысл.

Пространство в стеке существует только какПока ваш метод работает.(Полагаю, что если вы вложитесь в {}, это может выделить больше места. Я не знаю.) Пространство в куче сохраняется до тех пор, пока объекты не будут освобождены, но это может быть намного дольше, чем продолжительность вызова метода.

...