第2章 Java記憶體地區與記憶體溢出異常

來源:互聯網
上載者:User

標籤:

2.1 運行時資料區域

Java虛擬機器在執行Java程式的過程中把它所管理的記憶體劃分為若干個不同的資料區域。這些地區都有各自的用途,以及建立和銷毀的時間,有的地區隨著虛擬機器進程的啟動而存在,有些地區則依賴使用者線程的啟動和結束而建立和銷毀。如所示:

2.1.1 程式計數器

程式計數器是一塊較小的記憶體空間,它是線程的私人記憶體,可以看作時當前線程所執行的位元組碼的行號指標。在虛擬機器的概念性模型裡(僅是概念性模型,各種虛擬機器可能會通過一些更高效的方式去實現),位元組碼解譯器工作時就是通過改變這個計數器的值來選取下一個需要執行的位元組碼指令,分支,迴圈,跳轉,異常處理,線程恢複等基礎功能都需要依賴這個計數器來完成。

由於Java虛擬機器的多線程是通過線程輪流切換並分配處理器執行時間的方式來實現的,在任何一個確定的時刻,一個處理器(對於多核處理器來說是一個核心)都只會執行一條線程中的指令。因此,為了線程切換後能恢複到正確的執行位置,每條線程都需要有一個獨立的程式計數器,各個線程之間計數器互不影響,隔離儲存區 (Isolated Storage),稱之為“線程私人”記憶體。

如果線程正在執行一個Java方法,這個計數器記錄的正是正在執行的虛擬機器位元組碼指令的地址;如果線程正在執行一個Native方法,這個計數器則為空白(Undefined)。此記憶體地區是唯一一個在Java虛擬機器規範中沒有規定任何OutOfMemoryError情況的地區。

2.1.2 Java虛擬機器棧

Java虛擬機器棧是線程私人的。其描述的是Java方法執行的記憶體模型:每個方法在執行的同時都會建立一個棧幀,用於儲存局部變數表,運算元棧,動態連結,方法出口等資訊。每一個方法從調用直至執行完成的過程,就對應一個棧幀在虛擬機器棧中入棧到出棧的過程。

局部變數表:存放了編譯期可知的各種基礎資料型別 (Elementary Data Type)(boolean,byte,char,short,int,float,long,double),對象引用(reference類型,它不等同於對象本身,可能是一個指向對象地址的引用指標,也可能是執行一個代表對象的控制代碼或其他與此對象相關的位置)和returnAddress類型(指向了一條位元組碼指令的地址)。

注意:其中64位長度的long和double類型的資料會佔用2個局部變數空間(Slot),其餘的資料類型只佔用1個。局部變數表所需的記憶體空間在編譯期間完成分配,當進入一個方式時,這個方法需要在棧幀中分配多大的局部變數空間是完全確定的,在方法運行期間不會改變局部變數表的大小。

在Java虛擬機器規範中,對Java虛擬機器棧規定了兩種異常狀況:(1)如果線程請求的深度大於虛擬機器所允許的深度,將拋出StackOverflowError異常;(2)如果虛擬機器棧可以動態擴充(當前大部分的Java虛擬機器都可動態擴充,只不過Java虛擬機器規範中也允許固定長度的虛擬機器棧),如果擴充時無法申請到足夠的記憶體,就會拋出OutOfMemoryError異常。

2.1.3 本地方法棧

本地方法棧與虛擬機器棧所發揮的作用是非常相似的,它們之間的區別不過是虛擬機器棧為虛擬機器執行Java方法(也就是位元組碼)服務,而本地方法棧則為虛擬機器使用到的Native方法服務。在虛擬機器規範中對本地方法棧中方法使用的語言,使用方式與資料結構並沒有強制規定,因此,具體的虛擬機器可以自由實現它。甚至有的虛擬機器(比如:Sun HotSpot虛擬機器)直接把本地方法棧和虛擬機器棧合二為一。與虛擬機器棧一樣,本地方法棧地區也會拋出StackOverflowError和OutOfMemoryError異常。

2.1.4 Java堆

第2章 Java記憶體地區與記憶體溢出異常

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.