Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does initialized java array go onto stack or heap?

void someMethod() {
  byte[] array = { 0, 0 };
}

Will this array be stored in heap or on the stack?

like image 368
Christian Avatar asked Aug 13 '10 07:08

Christian


2 Answers

You can think of it as always going on the heap.

I believe some smart VMs are able to stack-allocate objects if they can detect it's safe - but conceptually it's on the heap. In particular, all array types are reference types (even if the element type is primitive), so the array variable (which is on the stack) is just a reference to an object, and objects normally go on the heap.

In particular, imagine a small change:

byte[] someMethod() { 
    byte[] array = { 0, 0 };
    return array;
}

If the array were allocated on the stack, what would the returned reference have to refer to?

like image 135
Jon Skeet Avatar answered Oct 22 '22 13:10

Jon Skeet


It will be stored in the heap

like image 37
Jeroen Rosenberg Avatar answered Oct 22 '22 15:10

Jeroen Rosenberg