English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
Numero | Chiave | Pila | Memoria 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 |