什么是 Klass & KlassKlass

2022-09-01 20:57:12

什么是 &in JVM Hotspot Implementation?KlassKlassKlass

据我从介绍烫发一代的文章中了解到,它是Java类的内部表示(假设)并且它将保存有关类结构的基本信息,包括字节码。它将作为对象本身存储。类 A 的每个对象都有一个指向 PermGen 中存在的内部表示形式的指针KlassAKlass

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

另外,指针指向它自己,我也不明白。KlassKlass'sKlass


答案 1

永久世代又名permgen是指存储所有类相关信息的地方。它有时被称为方法区域。

让我们以以下代码为例:

public class Parent
{
    ...
}

这里:

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

从理论上讲,这个链条可以继续下去,但KlassKlassKlass将与KlassKlass相同。

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

希望这有帮助


答案 2

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

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

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

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


推荐