jdk8内存模型变更-永久代更换为元空间

2018-10-10  本文已影响0人  OisCircle

参考文章
jdk8之后的HotSpot JVM将永久代取出, 取而代之的是Meta Space(元空间)

为什么被移出HotSpot JVM?

1.由于 PermGen 内存经常会溢出,引发恼人的 java.lang.OutOfMemoryError: PermGen,因此 JVM 的开发者希望这一块内存可以更灵活地被管理,不要再经常出现这样的 OOM
2.移除 PermGen 可以促进 HotSpot JVM 与 JRockit VM 的融合,因为 JRockit 没有永久代。

PermGen何去何从?
使用本地内存的优点

OOM问题将不复存在,因为默认的类的元数据分配只受本地内存大小的限制.
不过应该适当限制 Metaspace 的大小: 使用 -XX:MaxMetaspaceSize 参数来指定 Metaspace 区域的大小. JVM 默认在运行时根据需要动态地设置 MaxMetaspaceSize 的大小.
除此之外,它还有以下优点

GC行为

如果Metaspace的空间占用达到了设定的最大值,那么就会触发GC来收集死亡对象和类的加载器。根据JDK 8的特性,G1和CMS都会很好地收集Metaspace区(一般都伴随着Full GC).
为了减少垃圾回收的频率及时间,控制吞吐量,对Metaspace进行适当的监控和调优是非常有必要的。如果在Metaspace区发生了频繁的Full GC,那么可能表示存在内存泄露或Metaspace区的空间太小了。

What's New?
上一篇 下一篇

猜你喜欢

热点阅读