Java記憶體地區簡述__Java

來源:互聯網
上載者:User

在Java中,記憶體由虛擬機器進行管理,不像C++那樣需要為每個對象寫相應的delete/free方法,不容易出現記憶體流失和記憶體溢出的問題。
Java虛擬機器在執行java程式的過程中會把他所管理的記憶體劃分為若干個不同的資料區域,如下圖所示:
程式計數器

程式計數器是一塊很小的記憶體地區,可以看做當前線程所執行的位元組碼的行號指標。位元組碼解譯器在工作的時候就是通過這個計數器的值來選取下一條需要執行的位元組碼指令,分支、迴圈、跳轉、異常處理、線程恢複等基礎功能都需要這個計數器來完成。當進行多線程編程時,為了線程切換後能恢複到正確的執行位置,每條線程都有一個程式計數器,也就是說程式計數器不是所有線程共用的,每個線程的程式計數器都相互不影響,因此把這類記憶體地區稱為“線程私人”的記憶體。另外,此記憶體地區是唯一一個沒有在Java虛擬機器規範中規定出現OutOfMemoryError情況的地區。 Java虛擬機器棧

以前經常說的java記憶體分為堆和棧(不嚴謹),其中說的棧就是指的Java虛擬機器棧或者是虛擬機器棧中局部變數表部分。虛擬機器棧是Java方法執行的記憶體模型,每個方法執行的時候都會建立一個棧幀(Stack Frame)用於儲存局部變數表、運算元棧等資訊。每一個方法從調用開始到結束,就對應著一個棧幀在虛擬機器棧中入棧到出棧的過程,因此,我們也可以知道Java虛擬機器棧也是線程私人的,生命週期和線程的生命週期一樣,也就解釋了在方法中聲明的變數不存線上程同步的問題。再來說局部變數表,它存放了編譯期可知的基礎資料型別 (Elementary Data Type)、對象引用和returnAddress類型(指向了一條位元組碼指令的地址)。局部變數表所需要的記憶體空間在編譯期完成分配,當進入一個方法時這個方法需要在幀中分配多大的局部變數空間是知道的,方法運行期間不會改變局部變數表的大小。在Java虛擬機器規範中,對這個地區規定了兩種異常情況:如果線程請求的棧深度大於虛擬機器所允許的深度,將拋出StackOverflowError異常;如果虛擬機器棧可以動態擴充,當不能擴充時會拋出OutOfMemoryError。 本地方法棧

本地方法棧與虛擬機器棧發揮的作用是非常相似的,虛擬機器棧為虛擬機器執行java方法服務,本地方法棧為虛擬機器執行native方法服務,同樣是線程私人的。虛擬機器規範中對本地方法棧中使用的語言、方式和資料結構沒有強制規定,因此具體的虛擬機器可以自由的實現它。和虛擬機器棧一樣,它也會拋出StackOverflowError和OutOfMemoryError。 Java堆

堆是虛擬機器管理的記憶體中最大的一塊,和上面說的幾個地區不一樣,它不是線程私人的,而是所有線程所共用的一塊記憶體地區,Java虛擬機器規範中描述道:所有的對象執行個體以及數組都要在堆上分配,但是隨著JIT編譯器的發展和逃逸分析技術的成熟,棧上分配、標量替換最佳化技術將會導致一些微妙的變化,所有對象都在堆上分配也變得不是那麼絕對。Java堆也是垃圾收集器管理的主要區域,因此有時候也被稱為GC堆。神奇的是,Java堆可以處於物理上不連續的記憶體空間中,只要邏輯上是連續的就可以。當堆上的記憶體被用完,並且也不能拓展時,就會拋出OutOfMemoryError。 方法區

方法區和java堆一樣,是所有線程共用的,它用來儲存已經被虛擬機器載入的類資訊、常量、靜態變數、即時編譯器編譯的代碼等資料。java虛擬機器規範對方法區的限制十分寬鬆,和Java堆不需要連續的物理空間,可以選擇固定大小和可拓展,還可以選擇不實現記憶體回收。在這個地區實現記憶體回收是有必要的,但實現起來比較困難。當方法區無法滿足記憶體配置需求時,將拋出OutOfMemoryError。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.