在学习JVM知识时候遇到一个问题,就是方法区和堆区存储什么
方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,方法编译出的字节码也是保存在这个区域。
也有说静态变量存储在堆区?所以到底存在哪里
在学习JVM知识时候遇到一个问题,就是方法区和堆区存储什么
方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,方法编译出的字节码也是保存在这个区域。
也有说静态变量存储在堆区?所以到底存在哪里
引自免费微信小程序:皆我百晓生
在Java虚拟机(JVM)的内存模型中,方法区和堆是两个不同的内存区域,各自存储不同类型的程序数据:
方法区主要用于存储类级别的结构信息以及运行时常量池数据。具体包含以下内容:
注意:在Java 8及之前版本,永久代(PermGen)通常作为方法区的实现;而在Java 8之后,HotSpot JVM用元空间(Metaspace)取代了永久代来实现方法区,但存储的数据类型不变。
堆内存则是Java对象的主要存储区域,它主要负责存储对象实例,也包括:
Object[] array = new Object[10];
时,数组本身是在堆上分配的。总结一下,静态变量的“定义”或者说元数据存放在方法区,而其对应的值或引用则存放在堆中。当一个类被加载后,静态变量会在堆中初始化并分配内存空间。