4

在Java中,当类加载器加载类文件时,加载的类在哪里?在堆里?我知道对象位于堆中,但是类本身呢?在 Java 中,甚至 Class 也是一个对象,所以我的猜测是它在堆上?

4

2 回答 2

1

与加载的类(方法、字段等)相关的信息驻留在方法区域中。

尽管方法区在逻辑上是堆的一部分,但简单的实现可能会选择不进行垃圾收集或压缩它。此版本的 Java 虚拟机规范不要求方法区域的位置或用于管理已编译代码的策略。

方法区可能是堆的一部分,也可能不是堆的一部分,完全由 JVM 实现来决定在哪里存储它。

Class对象本身将存储在堆上。

于 2013-07-04T16:34:41.120 回答
1

从 Java 8 版本开始,“类元数据”存储在元空间区域中。MetaSpace 区域的美妙之处在于它会在需要时自动增长,我们也可以通过设置 maxMetaSpaceSize 来设置它的上限。

在 Java 8 发布之前,它曾经是 PermGen 区域的一部分。PermGen 是堆的一部分,所以从这个意义上说是的,对于你的问题。

PermGen 与元空间

于 2020-06-18T04:43:51.800 回答