首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么Java垃圾收集器清除PermGen?

什么Java垃圾收集器清除PermGen?
EN

Stack Overflow用户
提问于 2015-02-10 14:01:11
回答 2查看 5.5K关注 0票数 4

垃圾收集器列表:

  • 串行GC
  • 并行GC
  • 并行老GC
  • Conc标记扫描GC
  • G1 GC

我知道,当启用PermGen选项时,Conc标记扫描GC支持清除ClassUnloading。其他垃圾收集器支持清理PermGen吗?

原因:我们使用Spring、Hibernate和Groovy来创建大量代理,Perm变得更大。

编辑:应该提到我正在使用Java 7,我知道Java 8删除了Perm,并希望在将来的某个时候升级。同时,我的问题是,其他垃圾收集器是否支持清除PermGen,而不是Conc标记扫描。

  • 串行GC
  • 并行GC (相信-server默认使用此方法,并确认它可以清除烫发原)
  • 并行老GC
  • Conc标记扫描GC (可以使用JVM标志清除perm gen )
  • G1 GC
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-11 04:35:22

所有算法都在清理PermGen,但是

  • 并不是每个GC循环都包括PermGen清洗。
  • CMS可以同时清除PermGen ,G1一直要求停止世界完整的GC卸载类(清洁PermGen)直到Java 8u40。
  • Java 8有metaspace而不是PermGen,但它也需要垃圾收集(否则您将在metaspace中获得OOME )。

当我为了测试目的在单个进程中积极使用PermGen模拟多个JVM时,我一直在ClassLoaders中与OOME进行大量的斗争。我的结论是: PermGen GC不太可靠。一个运行它按预期工作,另一个它抛出OOEM。

票数 5
EN

Stack Overflow用户

发布于 2020-09-24 16:33:26

perm gen的问题在于它不应该是动态的,它应该是静态数据,比如类和常量。但是我们开发人员使用java所做的是动态创建类、重新定义类等,这需要更动态地使用这个空间,这就是为什么在metaspace情况下,它必须是这样的。

perm的最大问题是创建和销毁类加载器,因为它太容易在ThreadLocals和其他类加载器加载的其他库中泄漏类元数据,并且会留下无法被您使用的任何收集器回收的活动对象。

现在,所有的生产垃圾收集器都清理元空间,但是,它们不一定要以与其他内存区域相同的频率来清理它。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28433553

复制
相关文章

相似问题

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