Allocazione della memoria è un processo mediante il quale vengono assegnati programmi e servizi per computer fisici o virtuali memoria spazio. In questo articolo, impareremo l'allocazione della memoria in e discuteremo di Stack e Heap Memory.
- Cos'è Stack Memory
- Caratteristiche principali della memoria dello stack
- Metodi nella classe Stack
- Codice Java per l'implementazione dello stack
- Spazio heap in Java
- Caratteristiche principali della memoria heap
- Differenza tra Java Heap Space e Stack Memory
- Grafico di confronto
Cos'è la memoria stack?
La memoria Java Stack viene utilizzata per l'esecuzione di un thread. Contengono valori specifici del metodo di breve durata e riferimenti ad altri oggetti nell'heap a cui viene fatto riferimento dal metodo.
Pila si fa sempre riferimento alla memoria LIFO (Last-In-First-Out) ordine. Ogni volta che viene richiamato un metodo, viene creato un nuovo blocco nella memoria dello stack affinché il metodo contenga valori primitivi locali e faccia riferimento ad altri oggetti nel metodo.
Non appena il metodo termina, il blocco diventa inutilizzato e diventa disponibile per il metodo successivo.
system.exit (0) java
La dimensione della memoria dello stack è molto inferiore rispetto alla memoria dell'heap.
Caratteristiche principali della memoria dello stack
Oltre a ciò di cui abbiamo discusso finora, di seguito sono riportate alcune altre caratteristiche di Pila memoria:
- Cresce e si restringe quando vengono rispettivamente chiamati e restituiti nuovi metodi
- Le variabili all'interno dello stack esistono solo fintanto che il metodo che le ha create è in esecuzione
- Suo automaticamente allocato e deallocato quando il metodo termina l'esecuzione
- Se questa memoria è piena, Java lancia java.lang.StackOverFlowError
- L'accesso a questa memoria è veloce rispetto alla memoria heap
- Questa memoria è thread-safe poiché ogni thread opera nel proprio stack
Metodi nella classe Stack
- Oggetto push ( Elemento oggetto ): Spinge un elemento in cima alla pila.
- Oggetto pop (): Rimuove e restituisce l'elemento superiore dello stack. Un 'EmptyStackException' viene generata un'eccezione se chiamiamo pop () quando lo stack di invocazione è vuoto.
- Oggetto peek (): Restituisce l'elemento in cima allo stack, ma non lo rimuove.
- Booleano vuoto (): Restituisce vero se nulla è in cima alla pila. Altrimenti, restituisce false.
- int ricerca ( Elemento oggetto ): Determina se un oggetto esiste nello stack. Se l'elemento viene trovato, restituisce la posizione dell'elemento dalla parte superiore della pila. Altrimenti, restituisce -1.
Codice Java per l'implementazione dello stack
import java.io. * import java.util. * class Test {static void stack_push (Stack stack) {for (int i = 0 i<5 i++){ stack.push(i) } } static void stack_pop(Stack stack){ System.out.println('Pop :') for(int i = 0 i < 5 i++){ Integer y = (Integer) stack.pop() System.out.println(y) } } static void stack_peek(Stack stack){ Integer element = (Integer) stack.peek() System.out.println('Element on stack top : ' + element) } static void stack_search(Stack stack, int element){ Integer pos = (Integer) stack.search(element) if(pos == -1) System.out.println('Element not found') else System.out.println('Element is found at position ' + pos) } public static void main (String[] args){ Stack stack = new Stack() stack_push(stack) stack_pop(stack) stack_push(stack) stack_peek(stack) stack_search(stack, 2) stack_search(stack, 6) } }
//Produzione
Ora, spostiamoci nello spazio Heap.
Spazio heap in Java
La memoria viene allocata durante l'esecuzione delle istruzioni scritte dai programmatori. Si noti che il nome heap non ha nulla a che fare con la struttura dei dati dell'heap. Si chiama heap perché è un mucchio di spazio di memoria disponibile per i programmatori assegnato e de-allocare. Se un programmatore non gestisce bene questa memoria, può farlo una perdita di memoriaaccadere nel programma.
Caratteristiche principali della memoria heap Java
- Oltre a quanto discusso finora, di seguito sono riportate alcune altre caratteristiche dello spazio heap:
- Vi si accede tramite complesse tecniche di gestione della memoria che includono Giovane generazione, vecchia o Generazione di ruolo, e Generazione permanente
- Se lo spazio dell'heap è pieno, Java genera java.lang.OutOfMemoryError
- L'accesso a questa memoria è relativamente più lento della memoria dello stack
- Questa memoria, a differenza dello stack, non viene deallocata automaticamente. Ha bisogno Netturbino per liberare oggetti inutilizzati in modo da mantenere l'efficienza dell'utilizzo della memoria
- A differenza dello stack, un heap non lo è thread-safe e deve essere protetto sincronizzando correttamente il codice
Differenza tra Java Heap Space e Stack Memory
Sulla base delle spiegazioni di cui sopra, possiamo facilmente concludere le seguenti differenze tra Mucchio e Pila memoria.
- Mucchio la memoria viene utilizzata da tutte le parti dell'applicazione mentre la memoria dello stack viene utilizzata solo da un thread di esecuzione.
- Ogni volta che viene creato un oggetto, viene sempre memorizzato nello spazio Heap e la memoria dello stack contiene il riferimento ad esso. La memoria stack contiene solo file variabili primitive locali e variabili di riferimento agli oggetti nello spazio dell'heap.
- Gli oggetti archiviati nell'heap sono accessibili globalmente mentre la memoria dello stack non è accessibile da altri thread.
- La gestione della memoria nello stack viene eseguita in un file LIFO mentre è più complesso nella memoria Heap perché è utilizzata a livello globale. La memoria heap è suddivisa in Giovane generazione, vecchia generazione ecc., maggiori dettagli su Java Garbage Collection.
- La memoria dello stack è di breve durata mentre la memoria heap vive dall'inizio fino alla fine dell'esecuzione dell'applicazione.
- Possiamo usare -XMX e -XMS Opzione JVM per definire la dimensione di avvio e la dimensione massima della memoria heap. Possiamo usare -XSS per definire la dimensione della memoria dello stack.
- Quando la memoria dello stack è piena, il runtime Java genera java.lang.StackOverFlowError mentre se la memoria heap è piena, genera java.lang.OutOfMemoryError: Java Heap Spaceerrore.
- La dimensione della memoria dello stack è molto inferiore rispetto alla memoria dell'heap. A causa della semplicità nell'allocazione della memoria (LIFO), la memoria dello stack è molto veloce rispetto amucchio di memoria.
Grafico di confronto
PARAMETRO | PILA | MUCCHIO |
Di base | La memoria è allocata in un blocco contiguo | La memoria viene allocata in un ordine casuale |
Allocazione e deallocazione | Automatico dal compilatore | Manuale da programmatore |
Costo | Di meno | Di più |
Implementazione | Difficile | Facile |
Tempo di accesso | Più veloce | Più lentamente |
Problema principale | Mancanza di memoria | Frammentazione della memoria |
Località di differenza | Eccellente | Adeguato |
Flessibilità | Tasso fisso | È possibile il ridimensionamento |
Con questo, arriviamo alla fine di questo tutorial 'Allocazione della memoria in Java'. Spero che tu abbia compreso il concetto e la sua implementazione attraverso alcuni esempi in tempo reale.
Ora che hai capitoAllocazione della memoria in Javanozioni di base attraverso questo articolo 'Allocazione della memoria in Java' controlla il da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. I corsi di formazione e certificazione Java J2EE e SOA di Edureka sono progettati per studenti e professionisti che desiderano diventare sviluppatori Java. Il corso è progettato per darti un vantaggio nella programmazione Java e addestrarti per concetti Java sia di base che avanzati insieme a vari framework Java come Hibernate & Primavera .
Hai domande per noi? Menzionalo nella sezione commenti di questo blog 'Allocazione della memoria in Java' e ti risponderemo il prima possibile.