【问题标题】:What is Klass & KlassKlass什么是 Klass & KlassKlass
【发布时间】:2013-05-23 18:11:20
【问题描述】:

JVM 热点实现中的KlassKlassKlass 是什么?

据我从文章Presenting the Perm Generation 了解到,Klass 是Java 类的内部表示(比如说A),它将包含有关类结构的基本信息,包括字节码。它将作为对象本身存储。 A 类的每个对象都有一个指向 PermGen 中的内部表示 Klass 的指针

KlassKlass 是Klass 类本身的内部表示。为什么需要KlassKlass?它存储了哪些额外信息?

另外,一个KlassKlass'sKlass指针指向自己,我也没看懂。

【问题讨论】:

    标签: java jvm jvm-hotspot permgen


    【解决方案1】:

    Permanent Generation a.k.a permgen 是指存储所有类相关信息的地方。它有时被称为方法区。

    我们以下面的代码为例:

    public class Parent
    {
        ...
    }
    

    这里:

    • new Parent()Parent 类的对象。
    • (new Parent()).getClass() 指的是父级的Klass。这个对象的引用类型是java.lang.Class<Parent>。这将存储有关Parent 的注解、构造函数、字段、方法、其继承(超类、接口)等的信息
    • KlassKlass 将是 (new Parent()).getClass().getClass()。这个对象的引用类型是java.lang.Class<java.lang.Class>。这定义了java.lang.Class的注解、构造函数、字段、方法、它的继承(超类、接口)等信息。

    理论上,这条链可以继续,但 KlassKlassKlass 将与 KlassKlass 相同。

    简而言之,KlassKlass 意味着您将拥有一个 java.lang.Class 对象,它定义了 java.lang.Class 本身的行为。

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      您似乎对 HotSpot 中的存储管理有很好的总体了解。要获得一些更具体的细节,最好去马嘴 - 在这种情况下是 HotSpot 的开发人员。 This page是他们对存储管理系统的描述。

      在我想找出一些代码的情况下,我会尝试找到代码并阅读它。在这种情况下,我们可以找到 KlassKlass 类here 的实现。这似乎并没有在Klass 之上添加额外的信息——这看起来很有趣。请注意,KlassKlass 扩展了 Klass

      那么我们为什么需要它呢?好吧,我们可以将特定程序的Klass 层次结构绘制为一棵树,其中一个Klass 描述了另一个。一切都需要描述,但我们不能永远这样下去,我们需要找到一个fixed point,我们用来描述某事的东西就是它本身——这样我们就可以停下来了!

      所以,总而言之,KlassKlass 没有做任何比现有更有用的事情。它需要存在,但它的存在相当无趣。

      【讨论】:

        猜你喜欢
        • 2011-05-17
        • 2015-03-14
        • 2013-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-24
        • 1970-01-01
        相关资源
        最近更新 更多