стек на поток или на вызов метода? - PullRequest
2 голосов
/ 19 июня 2011

В следующем примере, сколько стеков создается?

public class Test {
public static void main(String [] args){
Test test = new Test();
test.callMe();
}
public void callMe(){
System.out.println("Call Me");
callMe2();
}
public void callMe2(){
System.out.println("Call Me2");
}
}

если есть два потока, обращающихся к основному методу одновременно, сколько стеков создается? Разве стек не используется несколькими методами?

Ответы [ 3 ]

8 голосов
/ 19 июня 2011

Каждый поток имеет стек, каждый вызов метода использует новую область этого стека.Это означает, что если метод вызывает сам себя, у него будет новый набор локальных переменных.

1 голос
/ 19 июня 2011

Если бы для каждого вызова метода был новый фрейм локальной переменной, вам не понадобился бы стек. Вы можете сделать все это с кучей памяти. В действительности, по соображениям производительности все практические реализации будут использовать стек и иметь однозначное соответствие между стеками и потоками.

1 голос
/ 19 июня 2011

сколько стеков создано?Разве стек не используется несколькими методами?

Просто для пояснения, стек - это деталь реализации, и он не создан в Java.Кроме того, методы являются абстракцией уровня языка, а стек является частью вашей среды выполнения.Правильный ответ на этот вопрос зависит от лота таких вещей, как ОС, архитектура машины и т. Д. И не охватывается в JLS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...