Matriz Java usando espaço de pilha

Esta é a maneira usual de declarar um array Java:

int[] arr = new int[100]; 

Mas esta matriz está usando espaço de heap. Existe uma maneira de declarar uma matriz usando o espaço de pilha como c + +?

Em uma palavra, não.

As únicas variables ​​armazenadas na pilha são primitivas e referências de object. No seu exemplo, a referência arr é armazenada na pilha, mas faz referência a dados que estão no heap.

Se você está fazendo essa pergunta vindo do C ++ porque quer ter certeza de que sua memory está limpa, leia sobre a garbage collection . Em resumo, o Java cuida automaticamente da limpeza da memory no heap, bem como da memory na pilha.

Arrays are objects independentemente de conter tipo primitivo ou tipo de object, assim como qualquer outro object seu allocated space on the heap.

But then from Java 6u23 versão But then from Java 6u23 , surgiu a Escape Analysis , default activated in Java 7 por 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 , então a JVM sabe que esse object não pode escaping desse escopo de método limitado e aplica várias otimizações nele. etc

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

Arrays são alocados dinamicamente para que eles vão no heap.

Quer dizer, o que acontece quando você faz isso:

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

Se a primeira alocação fosse feita na pilha, como coletaríamos o lixo? A referência arr é armazenada na pilha, mas a matriz real de dados deve estar no heap.

Ainda não é suportado como um recurso de idioma, porque isso exigiria tipos de valor, pois a transferência de dados na pilha por referência não seria segura.

Mas, como uma otimização ( análise de escape ), a JVM já pode fazer isso para variables ​​locais contendo matrizes pequenas e de tamanho fixo, se puder provar que não escapa do escopo local / de destino. Dito isso, é apenas uma otimização de tempo de execução e não uma garantia de especificação, por isso confiar nela é difícil.