java8中移除了永久带,新增了元空间的概念。JVM加载类的时候,需要记录类的元数据,这些数据会保存在一个单独的内存区域中,在java7里,这个空间被称为永久代,在java 8里,使用元空间代替了永久代。永久代和元空间保存的数据并不完全一样,永久代还保存另一些与类的元数据无关的杂项。
在java7里,将字符串常量从永久代移到了堆区域,但是永久代并没有完全改造完成。直到java 8,永久代的改造才算完全搞定,在元空间中保存的数据比永久代纯粹的多,就是类的元数据,这些信息只对编译器或JVM的运行时才有用。
在java8中,符号引用存储在native heap中,字符串常量和静态类型变量存储在普通的堆区中。