每个线程或每个方法调用堆栈?

时间:2011-06-19 06:23:31

标签: java multithreading stack

在下面的例子中创建了多少个堆栈?

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");
}
}

如果有两个线程同时访问main方法,会创建多少个堆栈?方法之间不共享堆栈吗?

3 个答案:

答案 0 :(得分:8)

每个线程都有一个堆栈,每个方法调用都使用该堆栈的新区域。这意味着如果方法调用自身,它将有一组新的局部变量。

答案 1 :(得分:1)

  

创建了多少个堆栈?方法之间不共享堆栈吗?

为了澄清,stack是一个实现细节,并且不是用Java创建的 。此外,方法是语言级抽象,而堆栈是运行时的一部分。这个问题的正确答案取决于操作系统,机器架构等批次,并且JLS中

答案 2 :(得分:1)

如果每个方法调用都有一个新的局部变量帧,那么你就不需要堆栈了。您可以使用堆内存完成所有操作。实际上,出于性能原因,所有实际实现都将使用堆栈并在堆栈和线程之间具有一对一的对应关系。