【问题标题】:JDK 8 Memory Layout and garbage collectionJDK 8 内存布局和垃圾回收
【发布时间】:2013-12-13 09:29:29
【问题描述】:

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

【问题讨论】:

  • 请注意,“Java 内存模型”的 a very specific meaning 与您的要求并没有真正的关系。是的,这个名字和你问的很相似。

标签: java garbage-collection java-8


【解决方案1】:

PermGen is replaced with Metaspace 在 Oracle/Sun JDK8 中,非常相似。主要区别在于元空间可以在运行时扩展。

【讨论】:

  • 好的...那么它可以增长多少?它是否仅受 java 进程可以拥有的最大内存量的限制?
  • @user503413 基于我提供的链接:“默认情况下,类元数据分配受可用本机内存量的限制(容量当然取决于您使用 32 位 JVM 还是 64-位以及操作系统虚拟内存的可用性)。”也可以用MaxMetaspaceSize参数限制
【解决方案2】:

这是 permGen 存在的时候

引入元空间后

毫无疑问,Java 8 中的 GC 有很多改进。 你可以查看这个stackoverflow post

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

GC 的优点是

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

【讨论】:

  • 您能否澄清一下“VM 元数据”到底是什么?还有什么是所谓的“内部热点类型”以及它们是如何受到影响的?
猜你喜欢
  • 1970-01-01
  • 2012-04-11
  • 2015-11-13
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多