Инициализированный массив Java идет в стек или кучу? - PullRequest
8 голосов
/ 13 августа 2010
void someMethod() {
  byte[] array = { 0, 0 };
}

Будет ли этот массив храниться в куче или в стеке?

Ответы [ 2 ]

18 голосов
/ 13 августа 2010

Вы можете думать об этом, как всегда, работая в куче.

Я считаю, что некоторые умные виртуальные машины могут размещать объекты в стеке, если они могут обнаружить, что это безопасно - но концептуально это включенокучаВ частности, все типы массивов являются ссылочными типами (даже если тип элемента является примитивным), поэтому переменная array (которая находится в стеке) является просто ссылкой на объект, и объекты обычно идут в кучу.

В частности, представьте небольшое изменение:

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

Если бы массив был размещен в стеке, на что должна ссылаться возвращаемая ссылка?

2 голосов
/ 13 августа 2010

будет храниться в куче

...