如何在内存(或其他地方)的java中表示对象的结尾?

时间:2014-12-09 08:42:18

标签: java object memory reference

例如,您创建了两个对象

Circle circle1 = new Circle();
Circle circle2 = new Circle();

我了解到circle1(以及circle2)指向堆内存中对象的起始位置。但现在问题出现了,它何时知道它何时结束?

我唯一可以想到的是每个类都等于一个新声明的类型,Java会将每个类型占用的空间存储在其他地方,这样它就知道circle1等于让我们说20个字节在记忆中。所以它然后神奇地不能改变在circle2处的那个点后面的任何东西。这只是我的想象力,我希望找到真正的答案。

2 个答案:

答案 0 :(得分:3)

JVM堆中对象的表示取决于this link的以下引用中提到的实现,该引用描述了JVM的结构:

  

Java虚拟机假设没有特定类型的自动存储管理系统,可以根据实现者的系统要求选择存储管理技术

同样来自该链接:

  

2.7。对象的表示

     

Java虚拟机不要求任何特定的对象内部结构。

     

在Oracle的一些Java虚拟机实现中,对类实例的引用是指向句柄的指针,该句柄本身就是一对指针:一个指向包含对象方法的表和一个指向Class的指针表示对象类型的对象,另一个表示从堆中为对象数据分配的内存。

答案 1 :(得分:1)

是java存储在perm空间的Class数据中的对象大小信息。