1 | ||||||
Стек и стековые фреймы30.03.2014, 21:33. Показов 4053. Ответов 7
Метки нет (Все метки)
Всем привет.
Как вы знаете, все вызовы методов и соответствующие локальные переменные хранятся в стеке, они помещаются в стековый фрейм. Всегда вызывается метод, находящийся на вершине стека. И теперь допустим такую ситуацию:
Этап первый: момент вызова метода shine(), помещение во фрейм + помещение л. переменной capacity. Этап второй: вызов метода generateLight() из метода shine(), создание фрейма, помещение метода и л. переменной str во фрейм. Этап третий: заканчивается метод generateLight(), фрейм выходит из стека, возвращаемся к коду после вызова этого метода в методе shine(). ... Теперь вопрос - когда метод кончится, удалится ли фрейм с вызовом и локальными переменными из стека?
0
|
30.03.2014, 21:33 | |
Ответы с готовыми решениями:
7
Стековые алгоритмы Скорость объявления и стековые объекты Что такое стековые массивы, на языке C# Стек. Создать случайно генерированный стек и поменять местами первый элемент с i |
31.03.2014, 19:46 [ТС] | 5 |
Хотелось бы иметь полную картину в голове, к тому же, в АСМе работа со стеками довольно тесная, так что, когда начну изучение АСМа, в некотором роде мне будет легче понять что и как работает. В любом случае, спасибо!
0
|
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
|
|
31.03.2014, 21:29 | 6 |
ссылки удалятся, объекты - нет, ими занимается GC.
Метод generateLight() у вас пустой, там на самом деле даже пустая ссылка не будет создана.
0
|
31.03.2014, 21:45 [ТС] | 7 |
Куча и объекты в ней - это вообще отдельная история, там как раз-таки и таится основная проблема нерационального использования виртуальных ресурсов памяти. Но в данном топике меня интересовала тема, касающаяся стека и вызовов методов. Ответы получил, картина прояснилась.
0
|
31.03.2014, 22:43 | 8 |
Freedomen, На самом деле, в случае java всё немного сложнее.
Во-первых, все эти разговоры про stack frame и выделения памяти на стеке - очень implementation specific. Так как JVM в природе существует больше чем одна, во всех это может быть устроено по-разному Во-вторых, stack frame вообще может не создаваться, если JVM того захочет. Например, если метод заинлайнился.
0
|
31.03.2014, 22:43 | |
31.03.2014, 22:43 | |
Помогаю со студенческими работами здесь
8
создать стек,заполнив числами 1,2,3...n.Посмотреть его содержимое,удалить стек Заполнить очередь и стек и поменять их содержимое местами через дополнительный стек. Используя стек, описать функцию проверяющую, является ли стек пустым Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |