“调用堆栈”和“线程堆栈”之间的区别

时间:2015-06-30 17:52:43

标签: java multithreading stack semantics

在Java多线程中,术语call stackthread stack之间是否存在语义差异?

4 个答案:

答案 0 :(得分:11)

每个线程都有自己的调用堆栈,“调用堆栈”和“线程堆栈”是一回事。将其称为“线程堆栈”只是强调调用堆栈特定于线程。

Bill Venners calls this the Java stack

  

启动新线程时,Java虚拟机会为该线程创建新的Java堆栈。如前所述,Java堆栈将线程的状态存储在离散帧中。 Java虚拟机只在Java Stacks上直接执行两个操作:它推送和弹出框架。

     

线程当前正在执行的方法是线程的当前方法。当前方法的堆栈帧是当前帧。定义当前方法的类称为当前类,当前类的常量池是当前常量池。在执行方法时,Java虚拟机会跟踪当前类和当前常量池。当虚拟机遇到对存储在堆栈帧中的数据进行操作的指令时,它会在当前帧上执行这些操作。

     

当线程调用Java方法时,虚拟机会创建一个新帧并将其推送到线程的Java堆栈中。然后,这个新帧成为当前帧。当该方法执行时,它使用该帧来存储参数,局部变量,中间计算和其他数据。

答案 1 :(得分:3)

call stackstack data structure,用于存储有关计算机程序的活动子例程的信息。

你所谓的thread stack是我假设的是一个线程的私有堆栈。

这两件事基本相同。它们都是stack data structures

  

线程的堆栈用于存储函数调用的位置,以便允许return语句返回到正确的位置

由于通常只有一个重要的调用堆栈,因此人们将其称为堆栈

Here是有关堆栈的信息。

Here是有关基于堆栈的内存分配的信息。

答案 2 :(得分:0)

每个线程都有自己的堆栈,每个方法调用都使用该堆栈的新区域。这意味着当一个方法调用自身(递归)时,它将有一组新的局部变量。

答案 3 :(得分:-1)

FileWriter抛出IOException时,运行时系统立即停止执行try块;正在执行的方法调用未完成。然后,运行时系统开始在方法调用堆栈的顶部搜索适当的异常处理程序。
在此示例中,当发生IOException时,FileWriter构造函数位于调用堆栈的顶部。但是,FileWriter构造函数没有适当的异常处理程序,因此运行时系统会在方法调用堆栈中检查下一个方法writeListwriteList方法具有两个异常处理程序:一个用于IOException,一个用于IndexOutOfBoundsException