JVM(hotspot)内存架构拓扑图

 

JVM(hotspot)内存管理:

 

JVM(hotspot)内存架构拓扑图_第1张图片

 

HotSpotèææºåå­æ¨¡å

 

Jvm把内存分为两大块,一个是none heap和 heap,也就是:永久存储区(Permanent Space)和堆空间(The Heap Space)。 

其中堆空间又分为新生区(Young (New) generation space)和养老区(Tenure (Old) generation space),新生区又分为伊甸园(Eden space),幸存者0区(Survivor 0 space)和幸存者1区(Survivor 1 space),具体见上图所示。

 

JVM(hotspot)内存架构拓扑图_第2张图片

 

1   永久存储区(Permanent Space):永久存储区是JVM的驻留内存,用于存放JDK自身所携带的Class,Interface的元数据,应用服务器允许必须的 Class,Interface的元数据和Java程序运行时需要的Class和Interface的元数据。被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭JVM时,释放此区域所控制的内存。

 

2   堆空间(The Heap Space):是JAVA对象生死存亡的地区,JAVA对象的出生,成长,死亡都在这个区域完成。堆空间又分别按JAVA对象的创建和年龄特征分为养老区和新生区。

2.1 新生区(Young (New) generation space):新生区的作用包括JAVA对象的创建和从JAVA对象中筛选出能进入养老区的JAVA对象。

2.1.1 伊甸园(Eden space):JAVA对空间中的所有对象在此出生,该区的名字因此而得名。也即是说当你的JAVA程序运行时,需要创建新的对象,JVM将在该区为你创建一个指定的对象供程序使用。创建对象的依据即是永久存储区中的元数据。

2.1.2 幸存者0区(Survivor 0 space)和幸存者1区(Survivor1 space):当伊甸园的控件用完时,程序又需要创建对象;此时JVM的垃圾回收器将对伊甸园区进行垃圾回收,将伊甸园区中的不再被其他对象所引用的对象进行销毁工作。同时将伊甸园中的还有其他对象引用的对象移动到幸存者0区。幸存者0区就是用于存放伊甸园垃圾回收时所幸存下来的JAVA对象。当将伊甸园中的还有其他对象引用的对象移动到幸存者0区时,如果幸存者0区也没有空间来存放这些对象时,JVM的垃圾回收器将对幸存者0区进行垃圾回收处理,将幸存者0区中不在有其他对象引用的JAVA对象进行销毁,将幸存者0区中还有其他对象引用的对象移动到幸存者1区。幸存者1区的作用就是用于存放幸存者0区垃圾回收处理所幸存下来的JAVA对象。

2.2 养老区(Tenure (Old) generation space):用于保存从新生区筛选出来的JAVA对象。

 

垃圾回收描述:垃圾回收分多级,0级为全部(Full)的垃圾回收,会回收养老区中的垃圾;1级或以上为部分垃圾回收,只会回收新生区中的垃圾,内存溢出通常发生于养老区段或永久存储区段,垃圾回收后,仍然无内存空间容纳新的Java对象的情况。

 

 

你可能感兴趣的:(JVM(hotspot)内存架构拓扑图)