JVM--棧的運行原理與棧中存儲的是什麼

棧中存儲什麼?

  • 每個線程都有自己的棧,棧中的數據都是以棧幀的格式存在。
  • 在這個線程上正在執行的每一個方法都各自對應一個棧幀
  • 棧幀是一個內存區塊,是一個數據集維繫着方法執行過程中的各種數據信息

在一條活動線程中,一個時間點上,只會有一個活動的棧幀,即只有當前正在執行的方法的棧幀(棧頂棧幀)是有效的,這個棧幀被稱爲當前棧幀(Current Frame),與當前棧幀對應的方法就是當前方法(Current method),定義這個方法的類就是當前類(Current Class)

執行引擎運行的所有字節碼指令只會針對當前棧幀進行操作

如果在該方法中調用了其他方法,對應的新的棧幀就會被創建出來,放在棧的頂端,稱爲新的當前幀
在這裏插入圖片描述
在這裏插入圖片描述
棧運行的原理:

  • 不同的線程中所包含的棧幀是不允許互相之間引用的,即不可能在一個棧幀之中引用另外一個線程的棧幀。

  • 如果當前方法調用了其他方法,方法返回之際,當前棧幀會傳回此方法的執行結果給前一個棧幀,接着,虛擬機會丟棄當前棧幀,使得前一個棧幀重新成爲當前棧幀。

  • Java方法由兩種返回函數的方式,一種是正常的函數返回,使用return指令;另一種是拋出異常。不管使用哪種方式,都會導致棧幀被彈出

    • 當沒有使用拋出異常時,methodA的異常會返回給main方法,看main方法有沒有對應的異常處理,如果沒有則報錯並且導致System.out.println(“methodA執行完畢”);沒有執行,

在這裏插入圖片描述

  • main方法使用了拋出異常之後執行結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章