JDK 8内存布局和垃圾回收

时间:2013-12-13 09:29:30

标签: java garbage-collection java-8

从我know开始,从JDK 8开始,PermGen将成为java历史上的过去页面。一切都很美好......但新的内存布局会是什么样子?这会影响新平台上的GC吗?

2 个答案:

答案 0 :(得分:38)

Oracle / Sun JDK8中的

PermGen is replaced with Metaspace,非常相似。主要区别在于Metaspace可以在运行时扩展。

答案 1 :(得分:22)

这是permGen存在的时候 enter image description here

引入Metaspace之后 enter image description here

当然,Java 8中的GC有很多改进。 您可以查看此stackoverflow post

在Metaspace中,为元数据分配了多个映射的虚拟内存空间,并且每个类加载器分配(以块为单位),具体取决于类加载器的类型及其活跃度。 块被返回到空闲块列表,并且在清空时返回虚拟内存空间。

GC的优点是

  • 在完全收集期间,不会扫描元数据到元数据指针
  • 删除了许多用于元数据扫描的复杂代码(特别是用于CMS)。
  • Metaspace包含很少的Java堆指针。
  • 没有元数据的压缩成本
  • 减少根扫​​描(不扫描已加载类和其他内部哈希表的VM字典)。

More detail is here