Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是Klass&;克拉斯克拉斯_Java_Jvm_Jvm Hotspot_Permgen - Fatal编程技术网

Java 什么是Klass&;克拉斯克拉斯

Java 什么是Klass&;克拉斯克拉斯,java,jvm,jvm-hotspot,permgen,Java,Jvm,Jvm Hotspot,Permgen,JVM热点实现中的Klass和KlassKlass是什么 据我从文章中了解,Klass是Java类的内部表示形式(比如a)&它将包含关于类结构的基本信息,包括字节码。它将作为对象本身存储。类A的每个对象都有一个指针,指向PermGen中存在的内部表示形式Klass KlassKlass是Klass类本身的内部表示。为什么需要KlassKlass?它存储了哪些额外的信息 另外,KlassKlass的Klass指针指向自身,我也不明白。永久生成a.k.a permgen是指存储所有类相关信息的位置。

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

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

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


另外,KlassKlass的
Klass
指针指向自身,我也不明白。

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

让我们以以下代码为例:

public class Parent
{
    ...
}
在这里:

  • newparent()
    Parent
    类的对象
  • (新父级()).getClass()
    指父级的
    Klass
    。此对象的引用类型将是
    java.lang.Class
    。这将存储有关父级的注释、构造函数、字段、方法及其继承(超类、接口)等的信息
  • KlassKlass将是
    (新父级()).getClass().getClass()
    。此对象的引用类型将是
    java.lang.Class
    。这定义了有关
    java.lang.Class
    的注释、构造函数、字段、方法及其继承(超类、接口)等的信息
理论上,这条链条可以继续下去,但克拉斯和克拉斯是一样的

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


希望这有助于

您似乎对HotSpot中的存储管理有了很好的总体了解。为了获得更具体的细节,最好去马的嘴上——在本例中是HotSpot的开发者。是他们对存储管理系统的描述

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

那我们为什么需要它呢?我们可以把一个特定程序的
Klass
层次结构画成一棵树,其中一个
Klass
描述另一个。每件事都需要一个描述,但我们不能永远这样下去,我们需要找到一个我们用来描述某件事的东西是它自己的地方——这样我们才能停下来

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