Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
1

Стек и стековые фреймы

30.03.2014, 21:33. Показов 4053. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.

Как вы знаете, все вызовы методов и соответствующие локальные переменные хранятся в стеке, они помещаются в стековый фрейм. Всегда вызывается метод, находящийся на вершине стека. И теперь допустим такую ситуацию:

Java
1
2
3
4
5
6
7
8
9
10
11
12
class Sun {
    public void shine() {
        int capacity = 0;
        generateLight();
 
        // Какой-то код
    }
    
    public void generateLight() {
        String str;
    }
}
Теперь рассмотрим касательно нахождения фреймов в стеке:

Этап первый: момент вызова метода shine(), помещение во фрейм + помещение л. переменной capacity.

Этап второй: вызов метода generateLight() из метода shine(), создание фрейма, помещение метода и л. переменной str во фрейм.

Этап третий: заканчивается метод generateLight(), фрейм выходит из стека, возвращаемся к коду после вызова этого метода в методе shine(). ...

Теперь вопрос - когда метод кончится, удалится ли фрейм с вызовом и локальными переменными из стека?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2014, 21:33
Ответы с готовыми решениями:

Стековые алгоритмы
у кого есть информация,как решать данную диаграмму с помощью стека?

Скорость объявления и стековые объекты
Чем стековый объект отличается от локального? В нижеприведенном коде g1 будет объявляться...

Что такое стековые массивы, на языке C#
что такое стековые массивы, на языке C# ?

Стек. Создать случайно генерированный стек и поменять местами первый элемент с i
Как создать случайно генерированный стек (тип элементов CHAR) и поменять местами первый элемент с i...

7
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
31.03.2014, 00:20 2
Лучший ответ Сообщение было отмечено Freedomen как решение

Решение

Freedomen, Да, удалится.
1
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
31.03.2014, 17:08  [ТС] 3
То есть после того, как последний вызов кончился, все стековые фреймы будут удалены из стека. Я правильно понимаю?
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
31.03.2014, 19:25 4
Лучший ответ Сообщение было отмечено Freedomen как решение

Решение

Freedomen, Да. Почему вас этот вопрос заинтересовал? Это имеет какое-то значение?
1
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
31.03.2014, 19:46  [ТС] 5
Хотелось бы иметь полную картину в голове, к тому же, в АСМе работа со стеками довольно тесная, так что, когда начну изучение АСМа, в некотором роде мне будет легче понять что и как работает. В любом случае, спасибо!
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
31.03.2014, 21:29 6
ссылки удалятся, объекты - нет, ими занимается GC.
Метод generateLight() у вас пустой, там на самом деле даже пустая ссылка не будет создана.
0
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
31.03.2014, 21:45  [ТС] 7
Куча и объекты в ней - это вообще отдельная история, там как раз-таки и таится основная проблема нерационального использования виртуальных ресурсов памяти. Но в данном топике меня интересовала тема, касающаяся стека и вызовов методов. Ответы получил, картина прояснилась.
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
31.03.2014, 22:43 8
Freedomen, На самом деле, в случае java всё немного сложнее.
Во-первых, все эти разговоры про stack frame и выделения памяти на стеке - очень implementation specific. Так как JVM в природе существует больше чем одна, во всех это может быть устроено по-разному
Во-вторых, stack frame вообще может не создаваться, если JVM того захочет. Например, если метод заинлайнился.
0
31.03.2014, 22:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2014, 22:43
Помогаю со студенческими работами здесь

создать стек,заполнив числами 1,2,3...n.Посмотреть его содержимое,удалить стек
Всем привет!помогите,пожалуйста!!! создать стек,заполнив числами 1,2,3...n.Посмотреть его...

Заполнить очередь и стек и поменять их содержимое местами через дополнительный стек.
Необходимо разработать программу, которая должна : Заполнить очередь и стек и поменять их...

Используя стек, описать функцию проверяющую, является ли стек пустым
Используя стек, описать функцию проверяющую, является ли стек пустым

Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru