JVM8內存、堆模型

包括:堆、棧、元數據區、本地方法棧、程序記數寄存器java

 

元數據區內存不在JVM中,而是使用的本地內存,默認狀況下受操做系統內存限制。spa

調整元數據區內存大小的參數 -XX:MetaspaceSize -XX:MaxMetaspaceSize操作系統

java8中移除了永久代,新增了元空間的概念。原來的方法區是邏輯劃分中的一個區域,對應hotspot jdk6中的永久代,能夠說永久代是方法區在hotspot的一個具體實現,可是從jdk7之後方法區就「四分五裂了」,再也不是在單一的一個去區域內進行存儲。blog

java8中繼承了一些jdk7中的改變:符號引用存儲在native heap中,字符串常量和靜態類型變量存儲在普通的堆區中,這個影響了String的intern()方法的行爲,這裏不作intern的詳述。繼承

而在java8中移除了永久代,新增了元空間,其實在這二者之間存儲的內容幾乎沒怎麼變化,而是在內存限制、垃圾回收等機制上改變較大。元空間的出現就是爲了解決突出的類和類加載器元數據過多致使的OOM問題,而從jdk7中開始永久代通過對方法區的分裂後已經幾乎只存儲類和類加載器的元數據信息了,到了jdk8,元空間中也是存儲這些信息,而符號引用、字符串常量等存儲位置與jdk7一致,仍是「分裂」的方法區。內存

符號引用沒有存在元空間中,而是存在native heap中,這是兩個方式和位置,不過均可以算做是本地內存,在虛擬機以外進行劃分,沒有設置限制參數時只受物理內存大小限制,即只有佔滿了操做系統可用內存後才OOM。字符串

JVM堆內存虛擬機

Xms和-Xmxio

用於設置堆內存的大小java8

-XX:NewSize和-XX:MaxNewSize

用於設置年輕代的大小,建議設爲整個堆大小的1/3或者1/4,兩個值設爲同樣大。

-XX:SurvivorRatio

用於設置Eden和其中一個Survivor的比值,這個值也比較重要。

-XX:NewRatio=3表明新生代和老年代的比例爲1:3

相關文章
相關標籤/搜索