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

2022-09-04 01:45:12

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


答案 1

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

Bill Venners称之为Java堆栈

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

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

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


答案 2

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

你所说的a是我假设的线程的私有堆栈。thread stack

这两件事本质上是相同的。他们都是.stack data structures

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

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

以下是有关堆栈的信息。

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