Массив Java, использующий пространство стека

Это обычный способ объявления массива Java:

int[] arr = new int[100];

Но этот массив использует пространство кучи. Есть ли способ, которым мы можем объявить массив, используя пространство стека, как C ++?

 tskuzzy08 июн. 2012 г., 20:03
@JigarJoshi: стек стекает.
 jn1kk08 июн. 2012 г., 20:03
Массив является контейнерным объектом. Все объекты идут в кучу.
 Jigar Joshi08 июн. 2012 г., 20:02
Зачем тебе это нужно ?
 icn08 июн. 2012 г., 20:04
@JigarJoshi Я думаю, это быстрее, чтобы получить доступ к пространству в стеке
 user94930008 июн. 2012 г., 20:07
Вы теряете микросекунду или две при создании / сборе из кучи, но, если вы не делаете это миллионы раз, беспокоиться о такой оптимизации бесполезно.

Ответы на вопрос(4)

потому что это потребуеттипы значений поскольку передача данных в стеке по ссылке не будет безопасной.

Но как оптимизация (анализ побега) JVM может уже сделать это для локальных переменных, содержащих небольшие массивы фиксированного размера, если только она может доказать, что она не выходит за рамки локальной / вызываемой области. Тем не менее, это всего лишь оптимизация времени выполнения, а не какая-то специальная гарантия, поэтому полагаться на нее сложно.

Решение Вопроса

Единственными переменными, которые хранятся в стеке, являются примитивы и ссылки на объекты. В вашем примереarr ссылка хранится в стеке, но она ссылается на данные, находящиеся в куче.

Если вы задаете этот вопрос из C ++, потому что хотите убедиться, что ваша память очищена, прочитайте овывоз мусора, Короче говоря, Java автоматически заботится об очистке памяти в куче, а также памяти в стеке.

Я имею в виду, что происходит, когда вы делаете это:

int[] arr = new int[4];
arr = new int[5];

Если бы первое выделение было выполнено в стеке, как бы мы его собрали? Ссылкаarr хранится в стеке, но фактический массив данных должен находиться в куче.

Arrays are objects независимо от того, содержит ли он примитивный тип или тип объекта, так же, как и любой другой объект егоallocated space on the heap.

But then from Java 6u23 версия,Escape Analysis возник, которыйdefault activated in Java 7.

Escape Analysis is about the scope of the object, when an object is defined inside a method scope rather than a class scopeзатем JVM знает, что этот объект не может выйти за пределы этой ограниченной области метода, и применяет к нему различные методы оптимизации, такие как свертывание констант и т. д.

Then it can also allocate the object which is defined in the method scope,
on the Thread's Stack, which is accessing the method.

Ваш ответ на вопрос