什么是Klass& KlassKlass

时间:2013-05-23 18:11:20

标签: java jvm jvm-hotspot permgen

什么是Klass& JVM热点实现中的KlassKlass

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

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

此外,KlassKlass's Klass指针指向自身,我也不理解。

3 个答案:

答案 0 :(得分:24)

永久生成a.k.a permgen是指存储所有类相关信息的地方。它有时被称为方法区域。

让我们举一个例子来说明以下代码:

public class Parent
{
    ...
}

下面:

  • new Parent()Parent class。
  • 的对象
  • (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相同。

Inshort,KlassKlass意味着你将有一个java.lang.Class对象来定义java.lang.Class本身的行为。

希望这有帮助

答案 1 :(得分:2)

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

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

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

因此,总结KlassKlass没有做比现有更有用的事情。它需要存在,但它的存在是相当无趣的。

答案 2 :(得分:-1)

可以将klass定义为模板/蓝图,描述其类型对象支持的行为/状态。