关于java.lang.Class对象存储位置的确认及官方文档需求
java.lang.Class对象的存储位置说明
核心结论:
java.lang.Class对象本身存储在**Heap(堆)**中;而它所代表的类元数据(比如方法字节码、常量池、字段定义等),Java 8及以后存于Metaspace,Java 8之前存于PermGen。关键区分点:
java.lang.Class是JVM完成类加载后创建的普通Java对象,和你自己用new关键字创建的对象没有本质区别,会被分配在堆内存中(分代收集的HotSpot里,可能在Eden区或老年代)。- Metaspace/PermGen的作用是存储类的元数据信息——这是JVM内部用来描述类结构的底层数据,不属于Java层面的对象范畴。
官方文档依据:
《Java Virtual Machine Specification》(Java SE 8版本)2.5.3章节明确指出:"The Java Virtual Machine has a heap that is shared among all Java Virtual Machine threads. The heap is the run-time data area from which memory for all class instances and arrays is allocated."
这段描述直接说明,所有类实例(包括Class对象)的内存都从堆中分配。HotSpot虚拟机官方文档对Metaspace的定义中提到:Metaspace用于存储类元数据(class metadata),包含类的结构信息、方法字节码等,但不存储Java对象实例,
Class对象作为实例仍属于堆内存范畴。
内容的提问来源于stack exchange,提问作者pjj
相关产品推荐
相关产品推荐

