Contenuti del Corso
Java Avanzato
Java Avanzato
Trasferimento Dati in Java
Come viene trasmessa l'informazione in Java?
Dal corso precedente sai che esistono due tipi di memoria: stack e heap. Vediamo come i dati vengono memorizzati in queste due aree di memoria:
Main.java
package com.example; public class Main { public static void main(String[] args) { String number = new String("170"); String word = new String("word"); int poolNumber = -4; } }
Abbiamo creato 3 variabili diverse. Di seguito è riportato un diagramma che illustra come e dove verranno memorizzate in memoria:
Analizziamo ciò che hai osservato nel diagramma:
- Vediamo campi
String
nella memoria stack che sono collegamenti ai valori nella memoria heap. In questo modo, non accediamo direttamente alla memoria heap ogni volta. Inizialmente, accediamo invece al collegamento nella memoria stack, che è più veloce rispetto all'accesso alla memoria heap. Hai già incontrato collegamenti ai valori quando hai studiato l'argomento String Pool; - Puoi vedere che
int
non viene memorizzato nella memoria heap; il suo valore è memorizzato direttamente nella memoria stack. Questo vale per tutti i tipi di dati primitivi (byte
,short
,int
,long
,float
,double
eboolean
). Quindi, i tipi di dati primitivi in Java vengono passati per valore. Tuttavia,String
non è un tipo di dato primitivo, quindi il suo valore viene memorizzato nella memoria heap; - Un nuovo oggetto viene creato nella memoria heap per ogni nuovo collegamento. Tuttavia, se due variabili dello stesso tipo hanno lo stesso valore, faranno riferimento allo stesso oggetto nella memoria heap;
- L'Integer Pool è un'area nella memoria stack dove tutti i valori interi nell'intervallo da
-128
a127
sono collegati. Questa ottimizzazione viene effettuata per migliorare le prestazioni nella gestione dei numeri in Java, poiché i numeri in questo intervallo sono comunemente utilizzati. Ricorda che la memoria stack opera più velocemente della memoria heap, quindi otteniamo risposte più rapide grazie all'Integer Pool; - Lo String Pool è un'area nella memoria heap dove vengono memorizzati i valori stringa identici.
Conclusione
In Java, tutto viene passato per valore. Per gli oggetti, viene passata una copia del riferimento, ma l'oggetto effettivo nell'heap rimane invariato (se è immutabile, come String
).
Le variabili nello stack memorizzano riferimenti a oggetti situati nell'heap. Questo vale per tutti i tipi di riferimento, incluso String
.
1. Che cos'è un Integer Pool in Java?
2. Come vengono passati i dati in Java, per riferimento o per valore?
Tutto è chiaro?
Grazie per i tuoi commenti!
Sezione 1. Capitolo 2