一个类的静态成员——静态变量、静态块和静态方法是在 Java 8 之后存储在 Metaspace 区域中的吗?如果不是,它们存储在哪里?
在其他地方没有关于相同的具体信息。我所能得到的信息是静态变量在类加载时分配了内存。但我的问题是内存分配的确切位置 - 堆栈或堆或元空间?
提前致谢!
一个类的静态成员——静态变量、静态块和静态方法是在 Java 8 之后存储在 Metaspace 区域中的吗?如果不是,它们存储在哪里?
在其他地方没有关于相同的具体信息。我所能得到的信息是静态变量在类加载时分配了内存。但我的问题是内存分配的确切位置 - 堆栈或堆或元空间?
提前致谢!
静态变量存储在堆本身中。从 Java 8 开始,PermGen Space 已被删除,并引入了名为 MetaSpace 的新空间,它不再是 Heap 的一部分,与以前的 Permgen Space 不同。元空间存在于本机内存(由操作系统提供给特定应用程序以供其使用的内存),它现在只存储类元数据。
内部字符串和静态变量被移动到堆本身。
有关官方信息,请参阅:JEP 122:Remove the Permanent Gen Space