background image

分区如下图:

4.1 JVM 分区的用途

永久存储区(Permanent Space):永久存储区是 JVM 的驻留内存,用于存放 JDK 自身所
携带的 Class,Interface 的元数据,应用服务器允许必须的 Class,Interface 的元数据和 Java 程
序运行时需要的 Class 和 Interface 的元数据。被装载进此区域的数据是不会被垃圾回收器
回收掉的,关闭 JVM 时,释放此区域所控制的内存。
堆空间(The Heap Space):是 JAVA 对象生死存亡的地区,JAVA 对象的出生,成长,死
亡都在这个区域完成。堆空间又分别按 JAVA 对象的创建和年龄特征分为养老区和新生区。
新生区(Young (New) generation space):新生区的作用包括 JAVA 对象的创建和从 JAVA
对象中筛选出能进入养老区的 JAVA 对象。
伊甸园(Eden space):JAVA 对空间中的所有对象在此出生,该区的名字因此而得名。也
即是说当你的 JAVA 程序运行时,需要创建新的对象,JVM 将在该区为你创建一个指定
的对象供程序使用。创建对象的依据即是永久存储区中的元数据。
幸存者 0 区(Survivor 0 space)和幸存者 1 区(Survivor1 space):当伊甸园的控件用完
时,程序又需要创建对象;此时 JVM 的垃圾回收器将对伊甸园区进行垃圾回收,将伊甸
园区中的不再被其他对象所引用的对象进行销毁工作。同时将伊甸园中的还有其他对象引
用的对象移动到幸存者 0 区。幸存者 0 区就是用于存放伊甸园垃圾回收时所幸存下来的
JAVA 对象。当将伊甸园中的还有其他对象引用的对象移动到幸存者 0 区时,如果幸存者 0
区也没有空间来存放这些对象时,JVM 的垃圾回收器将对幸存者 0 区进行垃圾回收处理,
将幸存者 0 区中不在有其他对象引用的 JAVA 对象进行销毁,将幸存者 0 区中还有其他对
象引用的对象移动到幸存者 1 区。幸存者 1 区的作用就是用于存放幸存者 0 区垃圾回收处