English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Differenza tra stack e heap in Java

La JVM divide lo spazio di memoria in due parti: una è la pila, l'altra è lo spazio heap. Lo spazio di pila viene utilizzato principalmente per memorizzare l'ordine di esecuzione dei metodi e le variabili locali

La pila memorizza sempre i blocchi in ordine LIFO, mentre la memoria heap utilizza l'allocazione dinamica per allocare e deallocare i blocchi di memoria 

La memoria assegnata alla heap esisterà fino a che non si verifica uno dei seguenti eventi:

  • Terminazione del programma 

  • Senza memoria 

Al contrario, la memoria assegnata alla pila esiste fino a quando la funzione non ritorna. Ecco le differenze.

NumeroChiavePilaMemoria heap
1
Base
La memoria stack viene utilizzata per memorizzare progetti di breve durata, come variabili locali e variabili di riferimento degli oggetti 
La memoria heap viene assegnata per memorizzare oggetti e classi JRE
2
Modo di ordinamento 
La pila mantiene sempre l'ordine LIFO (last in, first out)
La memoria heap è assegnata dinamicamente, non esiste un modello fisso per allocare e deallocare blocchi nella memoria 
3
Dimensione
Possiamo utilizzare il parametro JVM -XSS per aumentare la dimensione della memoria stack
Possiamo utilizzare le opzioni JVM -Xms e -Xmx per aumentare o ridurre la dimensione della memoria heap.
4
Visibilità 
La variabile è visibile solo per il thread proprietario 
Tutti i thread sono visibili 
  5 
Eccezione
JVM genererà l'errore java.lang.StackOverflowError
JVM genererà l'errore java.lang.OutOfMemoryError