在 Java 里,**元空间(Metaspace)**是 JVM 用来存储“类元数据”的内存区域,从 JDK 8 开始取代原来的 永久代(PermGen)。
下面用「是什么 → 存什么 → 为什么改 → 怎么调 → 常见问题」来理解。
Metaspace 是 JVM 的一块本地内存(Native Memory),不属于 Java 堆(Heap)。
简单说:
元空间 = 存放“类本身信息”的地方
主要包括:
✅ 不包括:
java.lang.OutOfMemoryError: PermGen space
✅ 使用 本地内存 ✅ 默认只受本机内存限制 ✅ 动态扩容,不容易轻易 OOM ✅ 类元数据管理更合理
Metaspace 分为:
# 初始元空间大小
-XX:MetaspaceSize=64m
# 最大元空间大小(防止无限膨胀)
-XX:MaxMetaspaceSize=256m
# 达到该值触发 GC(类卸载)
-XX:MetaspaceSize
⚠️ 如果不设置 MaxMetaspaceSize,可能撑爆物理内存
例如:
java.lang.OutOfMemoryError: Metaspace
jinfo <pid> | grep Metaspace
jstat -gc <pid>
关注:
MU → Metaspace Used
MC → Metaspace Capacity
jmap -dump:live,format=b,file=meta.hprof <pid>
用 MAT / VisualVM 看:
元空间是 JDK 8 后用来存储类元数据的本地内存区域,替代永久代,默认动态扩容,但仍可能因类加载过多而 OOM。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。