G1垃圾收集 永久代和MetaSpace

翻译https://blogs.oracle.com/poonam/entry/about_g1_garbage_collector_permanent

G1垃圾收集 永久代和MetaSpace

JDK7: 永久代

在JDK7中,永久代一直存在,只是此时已经开始移除其中的部分内容了

  • 符号引用(Symbols) 移动到native heap;
  • 字面量(interned strings)移动到java heap;
  • 类的静态变量(class statics)移动到了java heap。

JDK7: G1 and 永久代

对于G1,永久代只会被FULL GC回收。G1只会在两种情况下调用Full GC,FullGC是Stop-the-world(STW) GC.

  • 永久代满了
  • 应用程序分配内存的速度大于G1并发收集的速度(concurrently collect garbage)

对于CMS,可以使用 -XX:+CMSClassUnloadingEnabled 选项,在CMS并发循环(concurrent cycle)中收集,这和G1不同,G1只会在Full Stop-the-world(STW) GC时收集。

我们可以使用-XX:PermSize 和 -XX:MaxPermSize选项来分别设置永久代的大小和永久代的最大值。

JDK8:永久代

永久代在JDK8中已经被完全移除了。-XX:PermSize 和 -XX:MaxPermSize选项会被忽略。

JDK8:元空间(MetaSpace)

类的元数据(classes metadata),被存储在本地堆中(native heap),这个地方就叫做MetaSpace。同时为MetaSpace增加了新的Flag

  • -XX:MetaspaceSize 初始化元空间的大小(默认12Mbytes在32bit client VM and 16Mbytes 在32bit server VM,在64bit VM上会更大些)
  • -XX:MaxMetaspaceSize 最大元空间的大小(默认本地内存)
  • -XX:MinMetaspaceFreeRatio 扩大空间的最小比率,当GC后,内存占用超过这一比率,就会扩大空间
  • -XX:MaxMetaspaceFreeRatio 缩小空间的最小比率,当GC后,内存占用低于这一比率,就会缩小空间

默认的Metaspace只会受限于本地内存大小。当Metaspace到达MetaspaceSize的当前大小时,就会触发GC。当然你可以设置MetaspaceSize一个更大的值来延迟触发GC。

更多更详细的关于Metaspace
http://www.infoq.com/articles/Java-PERMGEN-Removed
译文:
http://ifeve.com/java-permgen-removed/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值