2014-11-29 3 views
-4

У меня проблемы со следующим упражнением, так как я не мог присутствовать на уроке, где была объяснена тема. Я попытался помочь себе с некоторыми видеороликами на YouTube, но на самом деле это не помогло мне понять результат. Я был бы очень благодарен, если бы кто-то немного помог мне.Java Heap and Stack

Следующий код Java Дано:

public class Programstructures { 
    public static int f(int n, int m) { 
     if (0 == n) { 
     return m + 1; 
     } 
     if (0 == m) { 
      return n + 1; 
     }return m + n; 
    } 

    public static void main(String[] args) { 
     if (0 < args.length) { 
     int v = Integer.parseInt(args[0]); 
     v = f(v, Integer.parseInt(args[1])); 
     System.out.println(v); 
     } 
    } 
} 

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

b) Определите состояние стека после начала функции f.

я получил следующие результаты:

а) п, м, v: стек. args []: куча.

б) Я не уверен. Мне бы хотелось пояснить здесь:/

Заранее благодарим!

Я не мог отметить вопрос как домашнее задание, извините.

+0

Что вы подразумеваете под словом «отметьте это как домашнюю работу?» Пометить его? Тег устарел, теперь все, что вам нужно сделать, это отметить, что он связан с домашней работой. – FlyingPiMonster

+1

просто выполняйте задание urself, назначение предназначено, чтобы помочь вам понять это. – nafas

+0

google для [jmm stack heap tutorial] (http://bit.ly/1rHMeOa), например. [Понять стек и кучу] (http://bit.ly/1uWYH0o) – ursa

ответ

0

Стол где локальные переменные и аргументы функций хранятся. Если a() звонит b() и b() звонит c(), то их локальные переменные и аргументы (если есть) будут сохранены в стеке. В этом случае сначала будут отображаться переменные a(), затем b(), а затем c(). Это упрощает возврат из функции, потому что когда возвращается c(), избавление от его локальных переменных и аргументов просто означает удаление последней части стека.

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

Если вы создаете объект внутри функции, объект будет находиться в куче, но ссылка на объект будет идти в стеке.

+0

вы только что путали стек метода с стеком, присутствующим в ОЗУ Эти два абсолютно разные вещи –

+0

@SarthakMittal Спасибо, я отредактирую ответ. – FlyingPiMonster