Cos'è l'allocazione della memoria in Java? Impila e accumula memoria



Questo articolo basato su 'Allocazione della memoria in Java' ti aiuterà con una conoscenza dettagliata dell'allocazione della memoria insieme alle strutture dati di Stack e Heap.

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'è 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



memory-allocation-in-java

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 contiguoLa memoria viene allocata in un ordine casuale
Allocazione e deallocazione Automatico dal compilatoreManuale da programmatore
Costo Di menoDi più
Implementazione DifficileFacile
Tempo di accesso Più velocePiù lentamente
Problema principale Mancanza di memoriaFrammentazione della memoria
Località di differenza EccellenteAdeguato
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.