Java虛擬機器 學習 第二章總結

來源:互聯網
上載者:User

標籤:虛擬   ring   符號   記憶體   windows64   記憶體管理   str   變化   靜態   

Java的記憶體管理機制
JVM運行時的資料區域:程式計數器,Java虛擬機器棧,本地方法棧,Java堆,方法區,運行時常量池,(直接記憶體)
按照線程共用分類:線程專屬
  1.程式計數器,佔用非常小的空間,用於維護線程切換時執行過程的正確性
  2.Java虛擬機器棧:Java線程沒執行一個方法都會產生一個棧幀,用於儲存局部變數表、運算元棧、動態連結、方法出口等資訊,而棧幀就儲存在Java虛擬機器棧中。使用-Xss 來控制棧的大小。有兩種情況會導致虛擬機器棧報錯:a.棧幀的數量過多,報錯SOF!例如無限遞迴(windows64位我測出來是 6w+報錯);b.沒建立一個線程都會為他分配一個虛擬機器棧,如果新建立線程時,無法分配新的虛擬機器棧則報OOM;
  3.本地方法棧:和Java虛擬機器棧沒有什麼區別,只不過面向本地Native方法。(Sun Hotspot是將兩個棧合并在一起了)
按照線程共用分類:線程共用
  1.Java堆:規範描述,所有的對象執行個體和數組都要在堆上分配。現在流行可擴充大小,使用-Xmx 和-Xms 進行控制,無法再擴充時,就會拋出OOM異常
  2.方法區:儲存已經被虛擬機器載入的類資訊、常量、靜態變數、即時編譯後的代碼資料。用-XX:MaxPermSize進行大小控制,當無法滿足記憶體配置是時拋出OOM。(關於-XX:PermSize使用,我在Java8上測試,提示-XX:MaxPermSize無效的,需要研究,查看資料,發現Java8中的永久代沒有啦,使用什麼元空間。需要學習Java7-Java8的記憶體模型的變化)
  3.運行時常量池:是方法區的一部分,用於儲存各種字面變數和符號應用。比如較小的int、調用String的intern()方法。
直接記憶體:並不在JVM規範裡面,不過會被頻繁的使用,使用-Xmx進行大小控制,如果沒有足夠的空間則拋出OOM

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.