例如,您创建了两个对象
Circle circle1 = new Circle();
Circle circle2 = new Circle();
我了解到circle1(以及circle2)指向堆内存中对象的起始位置。但现在问题出现了,它何时知道它何时结束?
我唯一可以想到的是每个类都等于一个新声明的类型,Java会将每个类型占用的空间存储在其他地方,这样它就知道circle1等于让我们说20个字节在记忆中。所以它然后神奇地不能改变在circle2处的那个点后面的任何东西。这只是我的想象力,我希望找到真正的答案。
答案 0 :(得分:3)
JVM堆中对象的表示取决于this link的以下引用中提到的实现,该引用描述了JVM的结构:
Java虚拟机假设没有特定类型的自动存储管理系统,可以根据实现者的系统要求选择存储管理技术
同样来自该链接:
2.7。对象的表示
Java虚拟机不要求任何特定的对象内部结构。
在Oracle的一些Java虚拟机实现中,对类实例的引用是指向句柄的指针,该句柄本身就是一对指针:一个指向包含对象方法的表和一个指向Class的指针表示对象类型的对象,另一个表示从堆中为对象数据分配的内存。
答案 1 :(得分:1)
是java存储在perm空间的Class数据中的对象大小信息。