亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java內存模型中的虛擬機棧原理分析

發布時間:2020-10-09 05:37:11 來源:腳本之家 閱讀:152 作者:Demrystv 欄目:編程語言

  Java虛擬機在執行Java程序的過程中會把它所管理的內存劃分為若干個不同的數據區域,這些區域都會有各自的用途,以及創建和銷毀的時間,有的區域會隨著虛擬機進程的啟動而存在,有些區域則依賴用戶線程的啟動和結束而建立和銷毀。Java虛擬機所管理的內存將會包括以下幾個運行時數據區域。如下圖所示(圖片來自《深入理解Java虛擬機》一書)。

Java內存模型中的虛擬機棧原理分析

  在內存中,棧分為兩部分,一部分是本地方法棧,為虛擬機使用到的Native方法服務,具體的虛擬機可以自由實現,另一部分就是虛擬機棧,主要是為虛擬機執行Java方法服務,因此也成為Java棧,本文主要是對虛擬機棧進行詳細解讀。

Java內存模型中的虛擬機棧原理分析

  1. Java棧也稱為虛擬機棧,也就是我們常常所說的棧。 Java棧是Java方法執行的內存模型。

  2. Java棧中存放的是一個個的棧幀,每個棧幀對應一個被調用的方法,在棧幀中包括局部變量表(Local Variables)、操作數棧(Operand Stack)、指向當前方法所屬的類的運行時常量池(運行時常量池的概念在方法區部分會談到)的引用(Reference to runtime constant pool)、方法返回地址(Return Address)和一些額外的附加信息。 當線程執行一個方法時,就會隨之創建一個對應的棧幀,并將建立的棧幀壓棧。當方法執行完畢之后,便會將棧幀出棧。 因此對于方法沒有存在回收資源一說 。

  3. 局部變量表,顧名思義,想必不用解釋大家應該明白它的作用了吧。就是用來存儲方法中的局部變量(包括在方法中聲明的非靜態變量以及函數形參)。對于基本數據類型的變量,則直接存儲它的值,對于引用類型的變量,則存的是指向對象的引用。局部變量表的大小在編譯器就可以確定其大小了,因此在程序執行期間局部變量表的大小是不會改變的。

  4. 操作數棧,想必學過數據結構中的棧的朋友想必對表達式求值問題不會陌生,棧最典型的一個應用就是用來對表達式求值。想想一個線程執行方法的過程中,實際上就是不斷執行語句的過程,而歸根到底就是進行計算的過程。因此可以這么說,程序中的所有計算過程都是在借助于操作數 。

  5. 指向運行時常量池的引用,因為在方法執行的過程中有可能需要用到類中的常量,所以必須要有一個引用指向運行時常量。

  6. 方法返回地址,當一個方法執行完畢之后,要返回之前調用它的地方,因此在棧幀中必須保存一個方法返回地址。

  7. 由于每個線程正在執行的方法可能不同,因此每個線程都會有一個自己的Java棧,互不干擾。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南昌县| 佳木斯市| 自治县| 图木舒克市| 宁乡县| 孝感市| 普兰店市| 巍山| 星子县| 峨边| 合肥市| 海宁市| 金塔县| 苏尼特右旗| 龙胜| 嘉定区| 和田县| 汪清县| 仲巴县| 房山区| 即墨市| 田东县| 临沧市| 子洲县| 云龙县| 德江县| 太白县| 灵丘县| 望都县| 榆社县| 永宁县| 名山县| 衡山县| 四子王旗| 米林县| 扎囊县| 邛崃市| 抚顺县| 谢通门县| 敦化市| 余庆县|