对象的实例变量是否存储在连续内存中

Are the instance variables for an object stored in continguous memory

对象的实例变量是否像数组中的元素一样存储在连续内存中?假设您有 Student class def,它具有名称、年龄和年级实例变量。 Studentclass构造实例时,实例变量是否存储在连续内存中?

总的来说,答案是肯定的;但这是未指定的。有一个库 specifically designed for this,您可以使用它。

例如 class 比如:

static class Example {
    byte b = 1;
    int x = 3;
    long l= 12;
}

你可以看到它的布局(通过ClassLayout.parseClass(Example.class).toPrintable()):

 Example object internals:
 OFFSET  SIZE   TYPE DESCRIPTION                               VALUE
      0    12        (object header)                           N/A
     12     4    int Example.x                                 N/A
     16     8   long Example.l                                 N/A
     24     1   byte Example.b                                 N/A
     25     7        (loss due to the next object alignment)
Instance size: 32 bytes
Space losses: 0 bytes internal + 7 bytes external = 7 bytes total

注意字段如何改变它们的位置(以减少填充),以及有一个 7 字节填充的事实。

你越深入地研究,事情就会变得越来越有趣,例如继承,或者由其他对象构成的对象。该库中的示例以这种方式非常丰富。