一尘不染

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

java

在Java多线程中,术语call stack和之间在语义上有区别thread stack吗?


阅读 199

收藏
2020-12-03

共1个答案

一尘不染

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

Bill Venners将此称为Java堆栈

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

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

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

2020-12-03