本章总结堆内存的结构和版本变化
JDK1.7:堆内存分三个区,新生代,老年代,永久代
- 新生代:Eden(伊甸园),servivor1,servivor2
- 老年代:old
- 永久代:perm
JDK1.8:堆内存还是分三个区,新生代,老年代,元空间
- 新生代:Eden(伊甸园),servivor1,servivor2
- 老年代:old
- 元空间:metaspace
知识小结:
- 在JDK8的时候,永久代被移除,用元空间替代。
- Eden: s1 : 2 默认分配内存为 8:1:1
- 新生代和老年代分配内存比例是1:2
- s1和s2分配的内存是相等的,因为垃圾回收复制算法需要这样。
- 方法区是一个规范,而永久代是它的实现。
- 关于字符串常量池,JDK6放在方法区中(永久代),JDK7后放在堆内存中。
- 当对象被调用15次而不被GC回收,就会被放入老年代。