请纠正我,这很令人困惑

  • 本文关键字: java reflection
  • 更新时间 :
  • 英文 :


如果我错了,请纠正我。有人告诉我,

  1. 每次加载类时,都会在堆内存中创建一个类对象,并且通过class名称将其引用保存在类区域
  2. 每个字段,如string,int,无论它是什么,也作为对象存储,它的引用在类对象中创建
  3. 同样适用于方法、构造函数等

现在还有一个问题,是为每个对象存储所有这些信息还是只创建一个对象来获取信息

也请告诉我这个Field类实际有什么?比如eg

class b
{
String s="sdnla";
}

有两个b类的对象,b1和b2,字段类对象有什么?

在正常情况下,每个类只有一个class对象。不是每个对象。如果Java为每个对象创建所有的结构,它将使用大量的内存;远远超过实际需要。

如果你在应用程序中创建了多个类加载器,那么你可能会在每个类中创建多个Class对象——每个类加载器持有一个。但很少有人做过这样的事。如果您正在编写应用程序服务器或类似的程序,您可能会这样做。

类中的变量为每个对象初始化为它分配了单独的空间但是对于构造函数和方法,只分配了一个公共空间类的所有对象都引用这个

如果我正确理解了你的问题。在这种情况下,请考虑字符串池。我认为无论你创建多少个对象,两个引用都可能指向字符串池上的同一个引用。

字符串池是Java堆中的一个特殊存储区域,主要位于PerGen空间,用于存储字符串字面值,如"abc"。当Java程序使用字符串文字创建一个新的字符串,JVM检查该字符串如果字符串字面值已经存在于池中,则相同对象返回,而不是创建一个全新的对象。字符串池check仅在将String创建为文字时执行,如果您使用new()操作符创建String对象,将创建一个新的String对象

如果你熟悉旧的块结构语言,对象实例在概念上是一个结构体加上一个指向该对象作为实例的类的指针。类提供方法、静态字段和其他所有实例之间共享的内容(直接或通过指向相关资源的指针)。对象携带非静态字段

相关内容

  • 没有找到相关文章

最新更新