Kursinnhold
Java Utvidet
Java Utvidet
Datatransport i Java
Hvordan overføres informasjon i Java?
Du vet fra forrige kurs at det finnes to typer minne – stack og heap. La oss se på hvordan data lagres i disse to minneområdene:
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; } }
Vi har opprettet 3 ulike variabler. Nedenfor er et diagram som illustrerer hvordan og hvor de vil bli lagret i minnet:
La oss gå gjennom det du observerte i diagrammet:
- Vi ser
String
-felt i stakkminnet som er pekere til verdier i heap-minnet. På denne måten får vi ikke direkte tilgang til heap-minnet hver gang. I stedet får vi først tilgang til pekeren i stakkminnet, noe som er raskere enn å få tilgang til heap-minnet. Du har allerede støtt på pekere til verdier da du lærte om emnet String Pool; - Du kan se at
int
ikke lagres i heap-minnet; verdien lagres direkte i stakkminnet. Dette gjelder for alle primitive datatyper (byte
,short
,int
,long
,float
,double
ogboolean
). Dermed sendes primitive datatyper i Java som verdier.String
er derimot ikke en primitiv datatype, så verdien lagres i heap-minnet; - Et nytt objekt opprettes i heap-minnet for hver ny peker. Men hvis to variabler av samme type har samme verdi, vil de referere til det samme objektet i heap-minnet;
- Integer Pool er et område i stakkminnet hvor alle heltallsverdier i området fra
-128
til127
er koblet. Denne optimaliseringen gjøres for å forbedre ytelsen ved håndtering av tall i Java, siden tall i dette området ofte brukes. Husk at stakkminnet opererer raskere enn heap-minnet, så vi får raskere responser takket være Integer Pool; - String Pool er et område i heap-minnet hvor identiske strengverdier lagres.
Konklusjon
I Java sendes alt som verdi. For objekter sendes en kopi av referansen, men det faktiske objektet i heapen forblir uendret (hvis det er uforanderlig, som String
).
Variabler i stakken lagrer referanser til objekter som ligger i heapen. Dette gjelder for alle referansetyper, inkludert String
.
1. Hva er en Integer Pool i Java?
2. Hvordan overføres data i Java, ved referanse eller ved verdi?
Alt var klart?
Takk for tilbakemeldingene dine!
Seksjon 1. Kapittel 2