在Java中,当类加载器加载类文件时,加载的类在哪里?在堆里?我知道对象位于堆中,但是类本身呢?在 Java 中,甚至 Class 也是一个对象,所以我的猜测是它在堆上?
问问题
1805 次
2 回答
1
与加载的类(方法、字段等)相关的信息驻留在方法区域中。
尽管方法区在逻辑上是堆的一部分,但简单的实现可能会选择不进行垃圾收集或压缩它。此版本的 Java 虚拟机规范不要求方法区域的位置或用于管理已编译代码的策略。
方法区可能是堆的一部分,也可能不是堆的一部分,完全由 JVM 实现来决定在哪里存储它。
Class
对象本身将存储在堆上。
于 2013-07-04T16:34:41.120 回答
1
从 Java 8 版本开始,“类元数据”存储在元空间区域中。MetaSpace 区域的美妙之处在于它会在需要时自动增长,我们也可以通过设置 maxMetaSpaceSize 来设置它的上限。
在 Java 8 发布之前,它曾经是 PermGen 区域的一部分。PermGen 是堆的一部分,所以从这个意义上说是的,对于你的问题。
于 2020-06-18T04:43:51.800 回答