首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >永久代总是在HotSpot VM上连续收集吗?

永久代总是在HotSpot VM上连续收集吗?
EN

Stack Overflow用户
提问于 2013-12-08 12:22:04
回答 1查看 658关注 0票数 9

通过阅读一个相当成熟的Oracle博客条目,我了解到

(...)永久世代目前是按顺序收集的。

然而,这篇博客文章是几年前写的,我想知道最近垃圾收集算法的进步如何改变了这一说法的准确性。我特别想知道新的G1垃圾收集器,它是甲骨文和:

旧的垃圾收集器(串行、并行、CMS)都将堆构造为三个部分:年轻代、老代和固定内存大小的永久代。(...)在执行垃圾回收时,G1的操作方式类似于CMS收集器。

但不要在整个教程中再次提到永久一代。

通过阅读有关CMS的文章--根据上面的声明,这与G1相似--我也没有找到任何关于永久世代的明确信息,但从这个其他博客条目中了解到

(...)同时标记和扫描一点也不紧凑。一旦不能再分配对象,就会触发串行主GC。

因此,我想知道,现代垃圾收集器(如CMS或G1 )是否完全忽略了永久生成,而留给运行旧系列GC的完整GC调用来清除永久代(而这个系列GC也依次收集年轻和成熟的世代,当使用G1而不是CMS时,我不会理解这是可取的)。我主要感兴趣的是,从STW和收集时间上看,在永久代上执行垃圾收集是否比收集终身代更昂贵。

额外的问题: Oracle教程提到永久代是堆的一部分。我一直认为永久生成是在堆之外显式地分配的。最近的HotSpot实现是否发生了这种变化?

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-12 06:21:26

有一个关于使JEP156能够在不使用完整GC的情况下卸载类的G1,但“依赖”部分指出,在使用[http://openjdk.java.net/jeps/122]时等待,直到永久代消失,以使JEP156更易于实现是有意义的。

因此,这个问题似乎确实可以在Java 8中得到解决,但这不仅仅是由于元空间的存在,而是因为元空间被视为实现类的增量GC的先决条件。

这就是我的理解。

编辑:在过去的几天里,我一直在听一些今年的JavaOne会议,很幸运的是,今天我找到了一个关于PermGen去除的,上面写着:

  • HotSpot当前需要完整的GC来收集PermGen
  • 即使在Metaspace的引入之后,这仍然是正确的。
  • 最后的总结幻灯片似乎证实了JEP156仍在计划中(但她没有谈论)。
  • 它甚至回答了我有答案但没有来源的额外问题:是的,PermGen在堆里。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20453322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档