java虛擬機器

來源:互聯網
上載者:User

標籤:盡心   常量   本地   物理   常量池   沒有   運行   str   經曆   

Java記憶體結構,分區,每個區放置什麼

 

 

 

 

 

 

 

 

 

 

 

 

程式計數器:(線程私人)當前線程所執行的位元組碼的行號指標,通過改變這個計數器的值來選取下一條需要執行的位元組碼的指令,以程式中分支、迴圈和跳轉等流程的控制都離不開這個計數器的指示。

 

虛擬機器棧:(線程私人),每個方法在執行時都會建立一個棧楨,用於儲存局部變數表、運算元棧、動態連結和方法出口等資訊。一個方法從調用到執行完成的過程,對應的棧楨在虛擬機器棧的進出過程。當線程結束時,虛擬機器棧中的資料會被自動的釋放。

局部變數表:基礎資料型別 (Elementary Data Type)、對象的引用、返回地址,局部變數表鎖需要的記憶體空間是在程式編譯時間就已經會被確定好的。

 

 

本地方法棧:(線程私人)虛擬機器棧是為執行java方法所服務的,而本地方法棧是為了虛擬機器使用到的本地方法鎖服務的。

 

堆區:(線程共用)java堆是被所有的線程所共用的一片地區,所有的對象的執行個體和數組都會在堆區盡心分配。java堆細分:新生代和老年代;也可能會劃分出多個線程鎖共用額分配緩衝區TLAB;

Java堆可以在物理上不連續的記憶體空間中,只要邏輯上連續就可以。

 

 

方法區:(線程共用)儲存已經被虛擬機器載入過的類的資訊、常量、靜態變數和及時編譯器編譯後的代碼。在方法區中一個地區叫做:運行時常量池,用於存放編譯後產生的字面量和符號的引用。

 

堆的分代

(1)年輕代:

所有新產生的對象首先都是放在年輕代的。年輕代的目標就是儘可能快速的收集掉那些生命週期短的對象。年輕代分三個區。一個Eden區,兩個Survivor區(一般而言)。
大部分對象在Eden區中產生。當Eden區滿時,還存活的對象將被複製到Survivor區(兩個中的一個),當一個Survivor區滿時,此區的存活對象將被複製到另外一個Survivor區,當另一個Survivor區也滿了的時候,從前一個Survivor區複製過來的並且此時還存活的對象,將被複製“年老區(Tenured)”。

 

(2)年老代:

在年輕代中經曆了N(可配置)次記憶體回收後仍然存活的對象,就會被放到年老代中。因此,可以認為年老代中存放的都是一些生命週期較長的對象。

 

(3)持久代:

用於存放待用資料,如 Java Class, Method 等。持久代對記憶體回收沒有顯著影響。

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.