jvm java內存區域的介紹
阿新 • • 發佈:2017-06-24
垃圾回收 出口 .html 運行時常量 說明 ble mage .cn 參考 jvm虛擬機在運行時需要用到的內存區域.廣泛一點就是堆和棧,其實不然,堆和棧只是相對比較籠統的說法,真正區分有如下幾個
先上圖一:
-XMS:堆的最小空間
-XMX:堆的最大空間
-PermSize:方法區的最小空間
-MaxPermSize:方法區的最大空間
-Xss:每個線程的堆棧空間
-newSize:新生代最小空間
-maxNewSize:新生代最大空間
老年代內存可以通過設置堆的大寫和新生代的大小來控制
老年代內存=堆內存-新生代內存
棧
虛擬機棧
線程私有,java執行方法的內存模型
每個方法執行的時候都會創建一個棧幀,用於存放局部變量、操作數棧、動態鏈接、方法出口等信息
局部變量表:基本數據類型、對象引用、long和double類型占兩個局部變量空間
每調用一個方法,都會對參數進行壓棧
方法區
線程共享
存放類的信息、常量、靜態變量、即時編譯後的代碼
方法區下又有運行時常量池:存放編譯期生成的字面量和符號引用
參考博文
http://www.cnblogs.com/xrq730/p/4827590.html
http://www.cnblogs.com/ityouknow/p/5610232.html
這裏考考大家:
文中提到的類信息是什麽?
編譯期生成的字面量和符號引用又是啥?
總的就是 java的內存模型 內存模型又分堆內存(heap)和方法區(有時也稱為non-heap)和棧 堆又分新生代(Young)和老年代(old/Tenured) 新生代又分默認比例為8:1:1的eden空間、from survivor空間、to survivor空間 當進行垃圾回收時,eden、survivor from 存活得對象會復制到servivor to空間 接著from與to空間互換.(當from區的對象足夠老時,即標記的次數達到老年級別,便到老年代去) 內存的大小設置參數可以如下一張圖說明
程序計數器
線程私有,控制著字節碼所執行的行數.調用本地方法(native)時為空 當前線程所執行的字節碼的行號指示器,字節碼解釋器就是在工作時通過改變計數器的行號來獲獲取要執行的字節碼指令.調用本地方法(native)時計數器為空虛擬機棧
線程私有,java執行方法的內存模型
每個方法執行的時候都會創建一個棧幀,用於存放局部變量、操作數棧、動態鏈接、方法出口等信息
局部變量表:基本數據類型、對象引用、long和double類型占兩個局部變量空間
每調用一個方法,都會對參數進行壓棧
本地方法棧
線程私有.調用native方法時 堆:堆內存
線程共享,對象的實例以及數組都存儲在這裏 堆又分新生代、老年代 在分代收集算法中,新生代又分eden空間、from survitor空間 和to survitor空間).它們之間內存比例為8:1:1方法區
線程共享
存放類的信息、常量、靜態變量、即時編譯後的代碼
方法區下又有運行時常量池:存放編譯期生成的字面量和符號引用
參考博文
http://www.cnblogs.com/xrq730/p/4827590.html
http://www.cnblogs.com/ityouknow/p/5610232.html
這裏考考大家:
文中提到的類信息是什麽?
編譯期生成的字面量和符號引用又是啥?
jvm java內存區域的介紹