20 Novembre 2021
Expand search form

Cos’è uno stack Java?

Unisciti alla comunità DZone e ottieni l’esperienza di membro completa.

Stack e heap sono due concetti importanti che dovresti capire in relazione all’allocazione della memoria Java. Diamo un’occhiata ai due concetti, perché sono importanti e quando dovresti usarli.

Cos’è lo stack Java?

Uno stack Java è una parte della memoria del vostro computer in cui sono memorizzate le variabili temporanee, che sono create da tutte le funzioni che fate. È usato per eseguire un thread e può avere alcuni valori di breve durata così come riferimenti ad altri oggetti. Utilizza la struttura dati LIFO, o last in first out.

Cosa significa questo? Quando un metodo viene invocato, crea un nuovo blocco nello stack per quel particolare metodo. Il nuovo blocco avrà tutti i valori locali, così come i riferimenti ad altri oggetti che vengono utilizzati dal metodo. Quando il metodo finisce, il nuovo blocco verrà cancellato e sarà disponibile per l’uso da parte del metodo successivo. Gli oggetti che si trovano qui sono accessibili solo a quella particolare funzione e non vivranno oltre.

Questo rende molto facile tenere traccia dello stack, dove l’ultimo blocco riservato è anche il primo ad essere liberato. Le variabili create per il metodo sono direttamente memorizzate nella memoria, permettendo un accesso veloce.

La dimensione della memoria di uno stack Java è generalmente molto inferiore a quella di uno spazio heap Java, perché quando un metodo finisce, tutte le variabili create sullo stack vengono cancellate per sempre.

Ecco un esempio di come creare un oggetto nello stack:

Cos’è l’heap di Java?

Gli oggetti Java si trovano in un’area che si chiama heap. Viene creato quando il programma viene eseguito, e la sua dimensione può diminuire o aumentare durante l’esecuzione del programma. Può facilmente diventare pieno, e quando succede, viene avviata la garbage collection. Questo è il momento in cui gli oggetti che non sono più utilizzati vengono eliminati per far posto a nuovi oggetti.

A differenza di uno stack Java dove l’allocazione della memoria viene fatta quando il programma viene compilato, in un heap viene allocata mentre il programma viene eseguito. L’accesso alle variabili collocate qui è un po’ più lento rispetto all’accesso diretto e veloce di uno stack.

L’heap è paragonato ad un pool di memoria globale. Un metodo o una funzione userà l’heap per l’allocazione della memoria se avete bisogno che i dati o le variabili vivano più a lungo del metodo o della funzione in questione. Gli oggetti che trovate qui sono accessibili a tutte le funzioni.

Inoltre, non c’è un ordine specifico nel riservare i blocchi in un heap. Potete allocare blocchi in qualsiasi momento, e poi liberarli quando volete. Come potete immaginare, è molto più complesso tenere traccia delle parti che sono libere e che possono essere allocate, ma può anche essere diviso in due generazioni o sotto-aree.

Queste sotto-aree sono chiamate lo spazio giovane (o nursery) e lo spazio vecchio. Lo spazio giovane è tipicamente destinato all’allocazione della memoria per i nuovi oggetti. Quando lo spazio giovane è pieno, avviene la garbage collection. Gli oggetti di breve durata o temporanei usano tipicamente lo spazio giovane. Questo aiuto rende la garbage collection più veloce rispetto ad un heap senza divisioni.

Ecco un esempio di come creare un oggetto nell’heap:

Somiglianze e differenze tra stack e heap

Entrambi sono modi in cui Java alloca la memoria ed entrambi sono memorizzati nella RAM. Tuttavia, per rendere le cose più facili da ricordare, l’heap è usato per l’allocazione dinamica della memoria, mentre lo stack è per le allocazioni statiche.

Dove viene memorizzata? Le variabili che sono allocate sullo stack sono accessibili direttamente dalla memoria, e come tali possono funzionare molto velocemente. L’accesso agli oggetti sull’heap, invece, richiede più tempo.

Quando avviene l’allocazione? Sullo stack, l’allocazione della memoria avviene quando il programma viene compilato. Nel frattempo, sull’heap, inizia quando il programma viene eseguito.

E poiché questo è il caso, se volete usare lo stack dovrete sapere quanti dati e quanta memoria vi serviranno prima della compilazione. Un’altra limitazione che lo stack ha è che non può gestire grandi blocchi di variabili che richiedono molta memoria. Se non sapete di quanti dati avrete bisogno in fase di esecuzione o se avete bisogno di memoria per molti dati, allora dovete usare l’heap.

In poche parole…

Stack

  • Le dimensioni dello stack variano man mano che i metodi e le funzioni creano e cancellano le variabili locali secondo necessità.
  • La memoria viene allocata e poi successivamente liberata senza che voi dobbiate gestire l’allocazione della memoria.
  • Lo stack ha dei limiti di dimensione, che possono variare a seconda del sistema operativo che usate.
  • Le variabili memorizzate sullo stack esistono per tutto il tempo in cui la funzione che le ha create è in esecuzione.

Heap

  • La memoria non è gestita automaticamente né è gestita così strettamente dall’unità centrale di elaborazione come lo stack. Dovreste liberare voi stessi la memoria allocata quando questi blocchi non sono più necessari.
  • L’heap è soggetto a perdite di memoria, dove la memoria viene allocata a oggetti inutilizzati e non sarà disponibile per processi diversi da quello.
  • Non c’è un limite di dimensione nell’heap.
  • Rispetto allo stack, gli oggetti nell’heap sono molto più lenti ad accedervi. È anche più lento scrivere sulla memoria nell’heap.

Lo stack è più facile e veloce da usare, ma ha molte limitazioni che si possono ignorare se si usa l’heap.

Quando si usa lo stack? Lo stack può essere usato solo per le variabili locali che utilizzano piccole quantità di memoria. La buona notizia è che l’allocazione e la gestione della memoria non sarà un vostro problema e l’accesso a questi oggetti è molto veloce. Soffre delle limitazioni di dimensione e del fatto che non è possibile ridimensionare le variabili sullo stack.

Quando si usa l’heap? Si usa l’heap per allocare la memoria se ci sono variabili che devono essere accessibili globalmente, invece di essere disponibili solo per i metodi e le funzioni che le hanno create. L’heap è anche buono quando si ha bisogno di molta memoria, dato che non ha limiti alla dimensione della memoria. Potete anche ridimensionare le variabili sull’heap.

Ulteriori risorse e tutorial

Per saperne di più sulle differenze tra stack e heap, e i migliori casi d’uso per ciascuno, visitate le seguenti risorse e tutorial:

Stack e heap sono due modi in cui Java alloca la memoria. L’heap è migliore nei casi in cui si hanno variabili che richiedono un accesso globale, mentre lo stack è il modo migliore per variabili locali che richiedono solo piccole quantità di memoria. Capire quando e come usare lo stack e l’heap è fondamentale per sviluppare programmi Java migliori.

È anche utile capire come funziona l’allocazione della memoria quando si ha a che fare con le perdite di memoria. Per una guida completa a tutti gli strumenti, siti web, blog e altre risorse di cui hai bisogno per migliorare il tuo gioco Java, scarica la nostra Guida completa per gli sviluppatori Java.

Pubblicato su DZone con il permesso di Angela Stringfellow, DZone MVB. Vedi l’articolo originale qui.

Potresti anche essere interessato agli argomenti

Che cosa è stack in Java con esempio?

Una pila è una struttura dati LIFO (Last In First Out). Supporta due operazioni di base chiamate push e pop. L’operazione push aggiunge un elemento in cima allo stack, e l’operazione pop rimuove un elemento dalla cima dello stack.

Come funzionano gli stack in Java?

La struttura dati Stack si basa sul principio Last In First Out (LIFO) e in Java implementa l’interfaccia Java List. Le operazioni di base supportate da uno stack sono push e pop. Push aggiunge un elemento in cima allo stack. Pop rimuove l’elemento più in alto di uno stack.

Cos’è lo stack nella programmazione?

Una pila è un Abstract Data Type (ADT), comunemente usato nella maggior parte dei linguaggi di programmazione. Si chiama pila perché si comporta come una pila del mondo reale, per esempio – un mazzo di carte o una pila di piatti, ecc. Una pila del mondo reale permette operazioni ad una sola estremità.

Perché gli stack sono utili in Java?

Le strutture di dati sono un tipo speciale di oggetto usato per memorizzare e manipolare i dati. Una pila è usata per memorizzare dati in un formato last in first out, il che significa che l’ultimo elemento aggiunto alla pila è il primo elemento che sarà rimosso da essa. …

Che cos’è l’esempio della pila?

Ci sono molti esempi di vita reale di una pila. Consideriamo un esempio di piatti impilati uno sull’altro in mensa. Il piatto che si trova in cima è il primo ad essere rimosso, cioè il piatto che è stato messo nella posizione più bassa rimane nella pila per il periodo di tempo più lungo.

Stack è una collezione in Java?

In Java, Stack è una classe che rientra nel framework Collection che estende la classe Vector. Implementa anche le interfacce List, Collection, Iterable, Cloneable, Serializable. Rappresenta la pila LIFO di oggetti.

Stack è una collezione in Java?

In Java, Stack è una classe che rientra nel quadro Collection che estende la classe Vector. Implementa anche le interfacce List, Collection, Iterable, Cloneable, Serializable. Rappresenta lo stack LIFO di oggetti.

Cos’è l’esempio della pila?

Ci sono molti esempi di vita reale di una pila. Consideriamo un esempio di piatti impilati l’uno sull’altro nella mensa. Il piatto che è in cima è il primo ad essere rimosso, cioè il piatto che è stato messo nella posizione più bassa rimane nella pila per il periodo di tempo più lungo.

Dove si usa lo stack?

Gli stack sono usati per implementare funzioni, parser, valutazione di espressioni e algoritmi di backtracking. Una pila di libri, una pila di piatti, una scatola di patatine Pringles possono essere tutti esempi di pile. Il principio operativo di base è che l’ultimo oggetto che metti dentro è il primo che puoi togliere.

Cos’è la pila e come funziona?

In informatica, una pila è un tipo di dati astratto che serve come una collezione di elementi, con due operazioni principali: Push, che aggiunge un elemento alla collezione, e. Pop, che rimuove l’ultimo elemento aggiunto che non è stato ancora rimosso.

Perché usiamo le pile?

Le pile sono usate per implementare funzioni, parser, valutazione di espressioni e algoritmi di backtracking. Una pila di libri, una pila di piatti, una scatola di patatine pringles possono essere tutti esempi di pile. Il principio operativo di base è che l’ultimo elemento che metti dentro è il primo che puoi togliere.

Cos’è una pila Perché è importante per la programmazione?

In generale, le pile sono utili per elaborare strutture annidate o per funzioni che chiamano altre funzioni (o se stesse). Una struttura annidata è una struttura che può contenere istanze di se stessa incorporate in se stessa.

Cos’è la pila, per esempio?

Una pila di libri, una pila di piatti, una scatola di patatine pringles possono essere tutti esempi di pile. Il principio operativo di base è che l’ultimo oggetto che metti dentro è il primo che puoi togliere. Cioè, una pila è una struttura Last In First Out (LIFO).

Quali sono le 6 applicazioni della pila?

Le seguenti sono le applicazioni dello stack: Valutazione di espressioni. Conversione di espressioni. i. Infix to Postfix. ii. Da Infix a Prefix. iii. Postfix a Infix. iv. Prefisso a Infix.Backtracking.Gestione della memoria.

Quali sono alcuni esempi di vita reale di stack?

Esempi di pile nella “vita reale”: La pila di vassoi in una caffetteria; Una pila di piatti in una credenza; Un vialetto che è largo solo una macchina….Esempi di pile nell’informatica: Pile avanti/indietro nei browser; pile Undo/Redo in Excel o Word; registri di attivazione delle chiamate ai metodi;

Articolo precedente

Come funziona una barra di torsione?

Articolo successivo

Cosa succede durante La Nina?

You might be interested in …