JDK 8内存布局和垃圾回收

31

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


10
请注意,“Java内存模型”具有非常特定的含义,与您所要求的内容实际上没有太大关系。是的,名称与您所询问的内容非常相似,具有一定的混淆性。 - Joachim Sauer
2个回答

38

好的...那么它能增长多少?它是否仅受Java进程可以拥有的最大内存量的限制? - Olimpiu POP
3
根据我提供的链接,“默认情况下,类元数据的分配受可用本机内存量的限制(当然,容量取决于您使用的32位JVM还是64位以及操作系统虚拟内存的可用性)”。它也可以通过MaxMetaspaceSize参数进行限制。 - Adam Dyga

25

当permGen存在时:

enter image description here

在引入Metaspace后:

enter image description here

Java 8中的GC有很多改进。

您可以查看此stackoverflow帖子

在Metaspace中,为元数据分配多个映射虚拟内存空间并以类加载器为依据(根据其类型和活动状态)进行分段分配。 当空闲时,返回到自由块列表中并释放虚拟内存空间。

GC的优点:

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

请问您能否澄清一下什么是“VM元数据”? 还有所谓的“内部热点类型”是什么,它们受到了什么影响? - Andrey M. Stepanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接