JDK 8内存布局和垃圾回收
据我所知 ,从JDK 8开始,PermGen将成为java历史上的一个页面。 一切都很美好…但新的内存布局会是什么样子? 这会影响新平台上的GC吗?
PermGen被 Oracle / Sun JDK8中的Metaspace取代,它非常相似。 主要区别在于Metaspace可以在运行时扩展。
这是permGen存在的时候
在Metaspace推出之后
当然,Java 8中的GC有很多改进。您可以查看此stackoverflowpost
在Metaspace中,为元数据分配多个映射的虚拟内存空间,并且根据类加载器的类型及其活动性,按类加载器分配(以块为单位)。 块返回到空闲块列表,并在清空时返回虚拟内存空间。
GC的优点是
- 在完全收集期间,不扫描元数据到元数据指针
- 删除了许多用于元数据扫描的复杂代码(特别是用于CMS)。
- Metaspace包含很少的Java堆指针。
- 没有元数据的压缩成本
- 减少根扫描(不扫描已加载类和其他内部哈希表的VM字典)。
更多细节在这里