永久代和元空间(Metaspace)

。_饼干妹妹 提交于 2019-12-17 21:08:29

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

PermGen(永久代)

  •  JVM 规范的一种实现
  • 只有 HotSpot 才有 “PermGen space”,
    • 方法区:是JVM的一种规范,存放类信息、常量、静态变量、即时编译器编译后的代码等;
    • 永久代:是HotSpot的一种具体实现,实际指的就是方法区,

元空间(Metaspace)

  • 本质和永久代类似,都是对JVM规范方法区实现
  • 不过元空间与永久代之间最大的区别在于:
    • 元空间并不在虚拟机中,而是使用本地内存
    • 因此,默认情况下,元空间的大小仅受本地内存限制,
    • 但可以通过以下参数来指定元空间的大小:
      • -XX:MetaspaceSize,初始空间大小,
      • -XX:MaxMetaspaceSize,最大空间,默认是没有限制的。
      • -XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比
      • -XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比

JDK 8 中永久代向元空间的转换,几点原因:

1、字符串存在永久代中,容易出现性能问题和内存溢出。

2、类及方法的信息等比较难确定其大小,

  • 因此对于永久代的大小指定比较困难,
    • 太小容易出现永久代溢出,
    • 太大则容易导致老年代溢出。

3、永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。

4、Oracle 可能会将HotSpot 与 JRockit 合二为一。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!