【问题标题】:Where do java class live?java类住在哪里?
【发布时间】:2011-04-07 04:55:57
【问题描述】:

我知道 Java 对象,实例变量被创建并存在于堆中,而局部变量和对象引用被创建并存在于堆栈中。

“类”本身在哪里呢?

我问这个是因为当你创建静态变量时,你使用类名来调用它们, 例如

Math.round()

创建 Math 类时,它在内存中的哪个位置(堆或堆栈)

加特

【问题讨论】:

  • 我认为所有类都加载到 PermGen 空间中。

标签: java


【解决方案1】:

堆的Permgen(永久代)区域...

【讨论】:

    【解决方案2】:

    Java 类存在于Permanent Generation heap 中。同时内部字符串池也存储在这里。

    永久代堆包含:

    • 类的方法(包括字节码)
    • 类的名称(以对象的形式指向永久代中的字符串)
    • 常量池信息(从类文件中读取的数据,所有详细信息请参见 JVM 规范的第 4 章)。
    • 与类关联的对象数组和类型数组(例如,包含对方法的引用的对象数组)。
    • JVM 创建的内部对象(例如 java/lang/Object 或 java/lang/exception)
    • 编译器 (JIT) 用于优化的信息

    【讨论】:

      【解决方案3】:

      类在 PermGen 空间(即堆)中加载

      【讨论】:

        【解决方案4】:

        所有类都加载到 PermGen 空间中

        【讨论】:

          【解决方案5】:

          您可以在此处阅读有关永久代(存储类、方法等)的更多信息:

          http://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation

          但是请注意,当您调用静态方法时,Java 实际上是在幕后创建对象的内部实例,因此您实际上是在对象的“幕后”全局实例上调用该方法。

          【讨论】:

            猜你喜欢
            • 2012-08-15
            • 1970-01-01
            • 2016-01-19
            • 2012-03-28
            • 2010-10-22
            • 1970-01-01
            • 1970-01-01
            • 2010-09-08
            • 2013-05-18
            相关资源
            最近更新 更多