You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 13中静态成员是否属于metaspace?元空间是否属于堆、位于native内存?

Java 13 HotSpot 环境下 Metaspace 相关规则解答

以下结论默认基于 OpenJDK/Oracle 官方 HotSpot 虚拟机实现,其他虚拟机实现(如 OpenJ9)可能存在差异:


问题1:静态方法、静态字段、静态代码块是否属于 Metaspace?

三类内容的存储规则分别如下:

  • 静态方法:方法的元数据(包含字节码内容、方法签名、访问标识、JIT 编译关联的元信息等)存储在 Metaspace 中,存储逻辑和普通实例方法的元数据完全一致。
  • 静态字段:从 Java 8 开始到 Java 13,静态字段(类变量)都不存储在 Metaspace 中,它跟随对应的 java.lang.Class 实例存储在堆内存中,这是和永久代(PermGen)时代最核心的差异之一。
  • 静态代码块:静态代码块本质是 JVM 识别的类初始化特殊方法 <clinit>,它的字节码、执行元信息均存储在 Metaspace 中。

问题2:Metaspace 是否属于堆内存,是否处于 native 内存中?

  • Metaspace 完全不属于 JVM 堆(Heap)内存的管辖范围,是独立于堆的内存区域。
  • Metaspace 的内存直接从本地内存(Native Memory,即操作系统层面的进程用户空间内存)分配,默认情况下仅受限于当前进程可用的本地内存上限,也可通过 JVM 参数 -XX:MaxMetaspaceSize 手动指定最大可用容量。

内容的提问来源于stack exchange,提问作者cpu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:09:03