JVM的記憶體分區,JVM記憶體分區

來源:互聯網
上載者:User

JVM的記憶體分區,JVM記憶體分區

JVM的記憶體分區

這篇文章嘗試討論清楚JVM的記憶體分區情況。

1.       JVM的記憶體和系統記憶體的關係

是對系統記憶體及JVM記憶體的大致描繪

 

對大多數作業系統,記憶體可以分為實體記憶體RAM及Swap(交換區)兩大部分,Swap Space在物理上是一塊獨立的磁碟地區,當作業系統發現記憶體不夠使用時,便開始使用交換區。

在系統層面,Linux系統的記憶體大致可以劃分為:

一個JAVA程式開始運行之後,是存在於系統之上的一個進程。這個進程所佔用的記憶體由JVM管理。

2.       JVM記憶體的劃分

JVM的記憶體可以劃分為以下幾個主要部分:

 

堆是記憶體回收的主戰場,因此由稱為Garbage Collected Heap(GC堆),在分代收集策略下。堆可以進一步劃分為新生代和老年代,更細緻的:

  • Eden區,對象第一次建立時,從Eden區開闢空間
  • Survivor區,當Eden區不足以進行下次記憶體配置時,JVM觸發一次GC,經過GC但未被回收的對象,被轉移到Survivor區。Survivor分為From,To兩部分,多次記憶體回收時未被回收的對象在這兩塊地區中來迴轉移。
  • Old區,當經過一定次數的GC後仍未被回收的對象,JVM將其轉移到老年代區

  4. JVM Stack,JAVA虛擬機器棧,線程私人,其生命週期與對應的線程相同。當每個方法執行時,均會建立一個棧幀(Stack Frame)用於儲存局部變數表,運算元棧,動態連結,方法出口等資訊。每個方法的執行和完成,便對應著Stack Frame在虛擬機器棧中的出棧和入棧的過程。通常意義上粗糙地將JVM記憶體劃分為堆和棧,其中的棧便指的是JVM Stack.

  5. Native Method Stack,本地方法棧,與JVM Stack類似,本地方法棧對應的是Native方法的執行管理。

此外,程式運行所需要的記憶體開闢在JVM的記憶體空間中,也可以直接申請系統記憶體(Directive Memory),但是直接申請的系統記憶體不受JVM的記憶體回收管理,其釋放由系統層面控制,因此對於不關注記憶體回收的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.