java運行時記憶體模式學習

來源:互聯網
上載者:User

標籤:

學習java運行時記憶體模式:

 

各區介紹:

  方法區(線程共用):用於存放被虛擬機器載入的類的中繼資料:靜態變數,常量,以及編譯和的代碼(位元組碼),也稱為永久代(所有該類的執行個體被回收,或者此類classLoader被回收)。

  Java堆(線程共用):存放對象執行個體和數組,這裡是記憶體回收的主要地方。可以分為新生代(young)和年老代(tenured)。從字面也可以知道,新生代存放剛剛建立的對象

而年老代存放長久沒有被記憶體回收機制回收的對象。一般新生代有分為eden,from survivor和to survivor。這是和回收演算法相關的分配(通過-Xms和-Xmx來配置)。

  程式計數器(線程私人):java被編譯成class,並被JVM解釋執行,執行的是每一條指令。程式計數器記錄當前線程執行的位元組碼地址,使得程式在輪詢擷取CPU時間片執行的時候能夠知道從何處執行。因此很好想到,這篇地區是線程私人的,因為這裡記錄的就是不同線程的執行地址。(程式計數器一般都比較小,所以在記憶體資源的分析時都會忽略這片記憶體的佔用)。

  虛擬機器棧(線程私人):隨線程一起建立,這是方法執行的記憶體模型,用來管理方法的執行。當方法開始執行時,記錄方法的局部變數表,運算元棧,動態連結方法,傳回值,傳回值的地址等方法執行的資訊。棧的大小決定了方法調用的可達深度(遞迴多少層次,或嵌套調用多少層其他方法,-Xss參數可以設定虛擬機器棧大小)。棧的大小可以是固定的,或者是動態擴充的。如果請求的棧深度大於最大可用深度,則拋出stackOverflowError;如果棧是可動態擴充的,但沒有記憶體空間支援擴充,則拋出OutofMemoryError。

  本地方法棧(線程私人):本地方法棧和虛擬機器棧類似,只是這是儲存本地方法的記憶體模型,管理本地方法的執行(Native)

  

  

 

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.