Java 8中静态变量存储位置咨询:是否存于MetaSpace?
Java 8中静态变量的存储位置解析
嘿,这个问题问得很精准!先给你一个明确的答案:Java 8里的静态变量是存储在MetaSpace(元空间)中的。
你提到Java 7中静态变量存在PermGen(永久代),这点完全没错。在Java 7及更早版本中,类的元数据(包括静态变量、方法定义、常量池等)都被放在PermGen区域,但PermGen有固定的内存上限,很容易因为类加载过多或者静态数据过大触发OutOfMemoryError。
Java 8彻底移除了PermGen,取而代之的是MetaSpace——它直接使用操作系统的本地内存,不再受JVM堆内存的固定限制(当然还是会受系统总内存的约束)。而静态变量作为类级别的数据,是绑定在对应类的Class对象上的,Class对象本身就存储在MetaSpace里,所以静态变量自然也就跟着存到MetaSpace中了。
这里再简单区分下:实例变量是属于对象实例的,会存在堆内存的对象实例区域;而静态变量属于类本身,所以跟着类的元数据一起待在MetaSpace里。
内容的提问来源于stack exchange,提问作者Illia




