![](/img/trans.png)
[英]What is the difference between Array Stack , Linked Stack , and Stack
[英]Difference between "call stack" and "thread stack"
在 Java 多thread stack
,術語call stack
和thread stack
之間是否存在語義差異?
每個線程都有自己的調用棧,“調用棧”和“線程棧”是一回事。 將其稱為“線程堆棧”只是強調調用堆棧特定於線程。
當啟動一個新線程時,Java 虛擬機為該線程創建一個新的 Java 堆棧。 如前所述,Java 堆棧將線程的狀態存儲在離散幀中。 Java 虛擬機僅直接在 Java Stacks 上執行兩個操作:推送和彈出幀。
線程當前正在執行的方法是線程的當前方法。 當前方法的堆棧幀是當前幀。 定義當前方法的類稱為當前類,當前類的常量池為當前常量池。 當它執行一個方法時,Java 虛擬機會跟蹤當前的類和當前的常量池。 當虛擬機遇到對堆棧幀中存儲的數據進行操作的指令時,它會在當前幀上執行這些操作。
當線程調用 Java 方法時,虛擬機會創建一個新幀並將其推送到線程的 Java 堆棧上。 這個新幀然后成為當前幀。 在方法執行時,它使用框架來存儲參數、局部變量、中間計算和其他數據。
每個線程都有自己的堆棧,每個方法調用都使用該堆棧的一個新區域。 這意味着當一個方法調用自身(遞歸)時,它將擁有一組新的局部變量。
當FileWriter
拋出IOException
,運行時系統立即停止執行try
塊; 正在執行的方法調用未完成。 運行時系統然后開始在方法調用堆棧的頂部搜索適當的異常處理程序。
在此示例中,當IOException
發生時, FileWriter
構造函數位於調用堆棧的頂部。 但是, FileWriter
構造函數沒有合適的異常處理程序,因此運行時系統會檢查方法調用堆棧中的下一個方法 — writeList
方法。 writeList
方法有兩個異常處理程序:一個用於IOException
,另一個用於IndexOutOfBoundsException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.