Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Is java array elements always stored in contiguous memory incase of reference types?

I’ve read that The elements of an array are stored in a contiguous memory location . Is it always the case ? I understand this is the case with array of primitives. I’m a bit confused about array of objects. An array of objects basically contains reference of the real objects right? references must be stored in contiguous locations but what about the real objects are they really stored in contiguous locations?

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Is it always the case ?

Yes, but keep reading.

I’m a bit confused about array of objects. An array of objects basically contains reference of the real objects right? references must be stored in contiguous locations but what about the real objects are they really stored in contiguous locations?

Exactly, what the array contains is object references, not the objects themselves. Think of object references as being similar to long values that tell the JVM where the object is elsewhere in memory (it’s more complicated than that, but that’s a useful mental model). The object references are stored in the array’s contiguous memory block. The objects are elsewhere, and may or may not be stored in contiguous memory (probably not).

So for instance, say we have:

int[] a = new int[] { 1, 2, 3 };

In memory we’ll get something like:

               +−−−−−−−+
a: Ref51234−−−>| int[] |
               +−−−−−−−+
               | 1     |
               | 2     |
               | 3     |
               +−−−−−−−+

a contains a reference to the array, which is elsewhere in memory and has a contiguous data block containing 1, 2, and 3.

Now let’s look at an object array (where the Example class stores the given constructor parameter as a private x field):

Example[] a = new Example[] { new Example(1), new Example(2), new Example(3) };

That might give us something like this:

               +−−−−−−−−−−−+          +−−−−−−−−−+
a: Ref51234−−−>| Example[] |     +−−−>| Example |
               +−−−−−−−−−−−+     |    +−−−−−−−−−+
               | Ref81372  |−−−−−+    | x: 1    |
               | Ref96315  |−−−−+     +−−−−−−−−−+   
               | Ref12975  |−−+ |                   +−−−−−−−−−+
               +−−−−−−−−−−−+  | +−−−−−−−−−−−−−−−−−−>| Example |
                              |                     +−−−−−−−−−+
                              |                     | x: 2    |
                              |                     +−−−−−−−−−+
                              |   +−−−−−−−−−+
                              +−−>| Example |
                                  +−−−−−−−−−+
                                  | x: 3    |
                                  +−−−−−−−−−+

Some environments have packed arrays as an adjunct. For instance, IBM documents packed arrays for its environment here.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading