Allocazione della memoria in Java: tutto ciò che devi sapere nel 2022
Pubblicato: 2021-01-10L'allocazione della memoria in Java si riferisce al processo in cui i programmi e i servizi per computer vengono allocati dedicati agli spazi di memoria virtuale. La Java Virtual Machine divide la memoria in Stack e Heap Memory. Per Java Virtual Machine, l'esecuzione di un'applicazione nel suo massimo potenziale può avvenire dalla memoria dello stack e dell'heap. Ogni volta che viene dichiarata una nuova variabile o oggetto, la memoria alloca memoria dedicata a tali operazioni.
Sommario
Pila di memoria
L' allocazione della memoria stock in Java viene utilizzata per la memoria statica e l'esecuzione dei thread. I valori contenuti in questa memoria sono temporanei e limitati a metodi specifici poiché continuano a essere referenziati in modo Last-In-First-Out.
Non appena la memoria viene chiamata e viene creato un nuovo blocco nella memoria dello stack, la memoria dello stack conserva valori e riferimenti primitivi fino a quando il metodo dura. Dopo la sua fine, il blocco viene svuotato ed è disponibile per un nuovo processo. In generale, la dimensione complessiva della memoria dello stack è insignificante rispetto a quella della memoria dell'heap.
Impara a creare applicazioni come Swiggy, Quora, IMDB e altroCaratteristiche della memoria dello stack
Sulla base delle diverse sezioni dell'allocazione della memoria in Java Virtual Machine (JVM) , ecco alcune delle caratteristiche discrete della memoria dello stack:
- La memoria dello stack può aumentare o contrarsi quando qualsiasi nuovo metodo viene chiamato e restituito di conseguenza.
- Qualsiasi variabile nello stack può essere eseguita finché esiste l'ambito del metodo.
- Ottiene l'allocazione automatica e la deallocazione man mano che un metodo viene eseguito.
- Nel caso di memoria piena, java.lang.StackOverFlowError parte.
- È più veloce nell'accesso rispetto alla memoria heap.
Leggi: Full-Stack vs. Software Engineer: quale dovresti scegliere?
Metodi utilizzati nell'allocazione della memoria dello stack in java
- Object push (Elemento oggetto): qui, un elemento viene spinto in cima allo stack.
- Object pop(): qualsiasi elemento posizionato in cima allo stack viene svuotato e restituito. Nel caso in cui uno stack sia vuoto quando viene invocato pop(), si verifica l'eccezione: EmptyStackException.
- Object peek(): qui, l'elemento in alto viene restituito ma non subisce lo svuotamento.
- Boolean empty(): se il ciclo non ha alcun valore superiore nel suo stack, la funzione restituisce 1 (true), altrimenti 0 (false).
- In search(Elemento oggetto): viene utilizzato per capire se un oggetto è presente nello stack. Nel caso in cui il valore venga trovato, la funzione restituisce la posizione dell'elemento dalla cima dello stack, altrimenti restituisce -1.
Leggi: Progetti e argomenti Java per principianti

Spazio dell'heap Java
Utilizzato principalmente dal runtime Java, Java Heap Space entra in gioco ogni volta che un oggetto viene creato e allocato in esso. La funzione discreta, come Garbage Collection, continua a svuotare la memoria utilizzata dagli oggetti precedenti che non hanno alcun riferimento. Per un oggetto creato nello spazio heap può avere libero accesso attraverso l'applicazione.
L' allocazione della memoria in Java è divisa in parti, ovvero Heap, Stack, Code e Static.
Caratteristiche della memoria heap Java
- Accessibile dalla complicata tecnica di gestione della memoria, inclusa la generazione giovane, vecchia o di ruolo e generazione permanente.
- Nella memoria heap, quando si riempie, restituisce java.lang.OutOfMemoryError.
- L'accesso a questa memoria è relativamente più lento di quello della memoria dello stack.
- Non subisce la deallocazione automatica e richiede una funzione simile come Garbage Collector per rimuovere oggetti estranei affinché la memoria funzioni nella sua fase ottimale.
Un esempio dell'allocazione della memoria stack e heap in Java è:


Fonte
Heap Space e Stack Memory: differenze fondamentali
Memoria dello spazio dell'heap | Pila di memoria |
Tutte le parti dell'applicazione richiamano la memoria heap. | L'esecuzione della memoria dello stack è limitata a un singolo thread. |
Ogni volta che un oggetto viene creato, viene archiviato nello spazio dell'heap. | La memoria dello stack comprende solo il suo riferimento e le variabili primitive locali. |
Gli oggetti qui sono accessibili a livello globale in tutta l'applicazione. | Altri thread non possono accedere agli oggetti di memoria dello stack. |
Qui la memoria è definita secondo le giovani e le vecchie generazioni. | La gestione della memoria avviene su base Last-In-First-Out. |
La memoria rimane secondo l'ambito dell'applicazione. | La memoria è temporanea. |
I metodi come – XMX e XMS JVM vengono utilizzati per definire la dimensione ottimale della memoria heap. | Per la memoria dello stack, viene determinata dal metodo -XSS. |
Qui, l'eccezione di java.lang.OutOfMemoryError si verifica nel caso di memoria piena. | Qui, l'errore java.lang.StackOverFlowError si verifica nel caso in cui la memoria sia piena. |
La dimensione è maggiore ma richiede tempo per l'elaborazione rispetto alla memoria dello stack. | La dimensione è minore ma più veloce nell'esecuzione per il suo regolare funzionamento LIFO. |
Leggi anche: Stipendio per sviluppatori Java in India
Impara i corsi di software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.
Conclusione
L'allocazione della memoria in Java avviene in due modi, principalmente, stack e heap space. Speriamo che ti abbia aiutato a capire il processo di tutto questo.
Se sei interessato a saperne di più sullo sviluppo di software full-stack, dai un'occhiata al programma Executive PG di upGrad & IIIT-B in Full-stack Software Development, progettato per i professionisti che lavorano e offre oltre 500 ore di formazione rigorosa, oltre 9 progetti, e incarichi, status di Alumni IIIT-B, progetti pratici pratici e assistenza sul lavoro con le migliori aziende.
Come avviene la gestione della memoria in Java?
Java Virtual Machine (JVM) è un programma informatico utilizzato per eseguire programmi scritti in linguaggio di programmazione Java. Rende efficiente il processo di utilizzo della gestione della memoria. Inoltre, è progettato per essere robusto in modo che, anche in caso di arresto anomalo del sistema operativo, il programma in esecuzione sulla JVM non sia interessato. Gestione della memoria significa gestire ogni pezzo di memoria (RAM) in un sistema informatico. JVM monitora l'allocazione e il rilascio di memoria quando necessario. Non appena un programma viene caricato in memoria, la JVM alloca spazio di memoria per esso. Questo processo è chiamato heap. L'heap è uno spazio di memoria comune per molte parti dell'applicazione.
Che cos'è Garbage Collection in Java?
La Java Virtual Machine (JVM) utilizza il conteggio dei riferimenti per tenere traccia del numero di oggetti Java. Prima che qualsiasi oggetto possa essere raccolto, il numero di riferimenti a questo oggetto deve raggiungere lo zero. Il programma utente può eliminare esplicitamente gli oggetti chiamando il metodo finalize(). Finalize è un metodo statico nella classe Object che viene chiamato da Garbage Collector (GC). Il metodo Finalize rilascerà tutte le risorse dell'oggetto prima che Garbage Collector si occupi di questo oggetto. Garbage Collector è il processo di pulizia degli oggetti indesiderati. Il processo di Garbage Collector verrà attivato quando il sistema di runtime Java rileva che l'heap Java è quasi pieno. Ogni oggetto ha una bitmap in JVM. La bitmap è impostata per ogni oggetto per tenere traccia se è stato utilizzato o meno. Quando la bitmap è impostata su 0, GC si occuperà di questo oggetto.
Quali sono le caratteristiche del linguaggio di programmazione Java?
Java Programming Language è un linguaggio di programmazione generico e di alto livello utilizzato per creare applicazioni e applet. Il software Java può essere eseguito su qualsiasi piattaforma che supporti Java senza essere riprogrammato. Le caratteristiche del linguaggio di programmazione Java sono: funzionalità orientate agli oggetti, robuste, ad alta sicurezza e indipendenti dalla piattaforma, gratuite, facili da apprendere e utilizzare. Java è un linguaggio di programmazione orientato agli oggetti che è indipendente dalla piattaforma e può essere utilizzato anche su qualsiasi sistema operativo o piattaforma. Java è un linguaggio compilato e viene prodotto un bytecode che viene quindi eseguito nella Java Virtual Machine.