简体   繁体   English

“调用栈”和“线程栈”的区别

[英]Difference between "call stack" and "thread stack"

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

Each thread has its own call stack, "call stack" and "thread stack" are the same thing.每个线程都有自己的调用栈,“调用栈”和“线程栈”是一回事。 Calling it a "thread stack" just emphasizes that the call stack is specific to the thread.将其称为“线程堆栈”只是强调调用堆栈特定于线程。

Bill Venners calls this the Java stack : Bill Venners 将此称为 Java 堆栈

When a new thread is launched, the Java virtual machine creates a new Java stack for the thread.当启动一个新线程时,Java 虚拟机为该线程创建一个新的 Java 堆栈。 As mentioned earlier, a Java stack stores a thread's state in discrete frames.如前所述,Java 堆栈将线程的状态存储在离散帧中。 The Java virtual machine only performs two operations directly on Java Stacks: it pushes and pops frames. Java 虚拟机仅直接在 Java Stacks 上执行两个操作:推送和弹出帧。

The method that is currently being executed by a thread is the thread's current method.线程当前正在执行的方法是线程的当前方法。 The stack frame for the current method is the current frame.当前方法的堆栈帧是当前帧。 The class in which the current method is defined is called the current class, and the current class's constant pool is the current constant pool.定义当前方法的类称为当前类,当前类的常量池为当前常量池。 As it executes a method, the Java virtual machine keeps track of the current class and current constant pool.当它执行一个方法时,Java 虚拟机会跟踪当前的类和当前的常量池。 When the virtual machine encounters instructions that operate on data stored in the stack frame, it performs those operations on the current frame.当虚拟机遇到对堆栈帧中存储的数据进行操作的指令时,它会在当前帧上执行这些操作。

When a thread invokes a Java method, the virtual machine creates and pushes a new frame onto the thread's Java stack.当线程调用 Java 方法时,虚拟机会创建一个新帧并将其推送到线程的 Java 堆栈上。 This new frame then becomes the current frame.这个新帧然后成为当前帧。 As the method executes, it uses the frame to store parameters, local variables, intermediate computations, and other data.在方法执行时,它使用框架来存储参数、局部变量、中间计算和其他数据。

A call stack is a stack data structure that stores information about the active subroutines of a computer program. call stack是一种stack data structure ,用于存储有关计算机程序的活动子例程的信息。

What you're calling a thread stack is what i assume is the private stack of a thread.您所说的thread stack是我假设的线程的私有堆栈。

These two things are essentially the same.这两件事本质上是一样的。 They are both stack data structures .它们都是stack data structures

A thread's stack is used to store the location of function calls in order to allow return statements to return to the correct location线程的堆栈用于存储函数调用的位置,以便让 return 语句返回到正确的位置

Since there usually is only one important call stack, it is what people refer to as the stack .由于通常只有一个重要的调用栈,所以人们称之为

Here is information about the stack. 是有关堆栈的信息。

Here is information about Stack-based memory allocation. 以下是有关基于堆栈的内存分配的信息。

Each thread has its own stack, each method call uses a new area of that stack.每个线程都有自己的堆栈,每个方法调用都使用该堆栈的一个新区域。 This means when a method calls itself (recursion), it will have a new set of local variables.这意味着当一个方法调用自身(递归)时,它将拥有一组新的局部变量。

When FileWriter throws an IOException , the runtime system immediately stops executing the try block;FileWriter抛出IOException ,运行时系统立即停止执行try块; method calls being executed are not completed.正在执行的方法调用未完成。 The runtime system then starts searching at the top of the method call stack for an appropriate exception handler.运行时系统然后开始在方法调用堆栈的顶部搜索适当的异常处理程序。
In this example, when the IOException occurs, the FileWriter constructor is at the top of the call stack.在此示例中,当IOException发生时, FileWriter构造函数位于调用堆栈的顶部。 However, the FileWriter constructor doesn't have an appropriate exception handler, so the runtime system checks the next method — the writeList method — in the method call stack.但是, FileWriter构造函数没有合适的异常处理程序,因此运行时系统会检查方法调用堆栈中的下一个方法 — writeList方法。 The writeList method has two exception handlers: one for IOException and one for IndexOutOfBoundsException . writeList方法有两个异常处理程序:一个用于IOException ,另一个用于IndexOutOfBoundsException

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM