簡體   English   中英

“調用棧”和“線程棧”的區別

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

在 Java 多thread stack ,術語call stackthread stack之間是否存在語義差異?

每個線程都有自己的調用棧,“調用棧”和“線程棧”是一回事。 將其稱為“線程堆棧”只是強調調用堆棧特定於線程。

Bill Venners 將此稱為 Java 堆棧

當啟動一個新線程時,Java 虛擬機為該線程創建一個新的 Java 堆棧。 如前所述,Java 堆棧將線程的狀態存儲在離散幀中。 Java 虛擬機僅直接在 Java Stacks 上執行兩個操作:推送和彈出幀。

線程當前正在執行的方法是線程的當前方法。 當前方法的堆棧幀是當前幀。 定義當前方法的類稱為當前類,當前類的常量池為當前常量池。 當它執行一個方法時,Java 虛擬機會跟蹤當前的類和當前的常量池。 當虛擬機遇到對堆棧幀中存儲的數據進行操作的指令時,它會在當前幀上執行這些操作。

當線程調用 Java 方法時,虛擬機會創建一個新幀並將其推送到線程的 Java 堆棧上。 這個新幀然后成為當前幀。 在方法執行時,它使用框架來存儲參數、局部變量、中間計算和其他數據。

call stack是一種stack data structure ,用於存儲有關計算機程序的活動子例程的信息。

您所說的thread stack是我假設的線程的私有堆棧。

這兩件事本質上是一樣的。 它們都是stack data structures

線程的堆棧用於存儲函數調用的位置,以便讓 return 語句返回到正確的位置

由於通常只有一個重要的調用棧,所以人們稱之為

是有關堆棧的信息。

以下是有關基於堆棧的內存分配的信息。

每個線程都有自己的堆棧,每個方法調用都使用該堆棧的一個新區域。 這意味着當一個方法調用自身(遞歸)時,它將擁有一組新的局部變量。

FileWriter拋出IOException ,運行時系統立即停止執行try塊; 正在執行的方法調用未完成。 運行時系統然后開始在方法調用堆棧的頂部搜索適當的異常處理程序。
在此示例中,當IOException發生時, FileWriter構造函數位於調用堆棧的頂部。 但是, FileWriter構造函數沒有合適的異常處理程序,因此運行時系統會檢查方法調用堆棧中的下一個方法 — writeList方法。 writeList方法有兩個異常處理程序:一個用於IOException ,另一個用於IndexOutOfBoundsException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM