Kursinnehåll
Java Fördjupad
Java Fördjupad
Dataöverföring i Java
Hur överförs information i Java?
Du känner till från föregående kurs att det finns två typer av minne - stack och heap. Låt oss titta på hur data lagras i dessa två minnesområden:
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 skapat 3 olika variabler. Nedan finns ett diagram som illustrerar hur och var de lagras i minnet:
Låt oss gå igenom vad du observerade i diagrammet:
- Vi ser
String
-fält i stackminnet som är länkar till värden i heapminnet. På detta sätt behöver vi inte komma åt heapminnet direkt varje gång. Istället får vi först tillgång till länken i stackminnet, vilket är snabbare än att komma åt heapminnet. Du har redan stött på länkar till värden när du lärde dig om ämnet String Pool; - Du kan se att
int
inte lagras i heapminnet; dess värde lagras direkt i stackminnet. Detta gäller för alla primitiva datatyper (byte
,short
,int
,long
,float
,double
ochboolean
). Därför passeras primitiva datatyper i Java som värden. Dock ärString
inte en primitiv datatyp, så dess värde lagras i heapminnet; - Ett nytt objekt skapas i heapminnet för varje ny länk. Men om två variabler av samma typ har samma värde, kommer de att referera till samma objekt i heapminnet;
- Integer Pool är ett område i stackminnet där alla heltalsvärden i intervallet från
-128
till127
är länkade. Denna optimering görs för att förbättra prestandan vid hantering av tal i Java, eftersom tal i detta intervall ofta används. Kom ihåg att stackminnet arbetar snabbare än heapminnet, så vi får snabbare svar tack vare Integer Pool; - String Pool är ett område i heapminnet där identiska strängvärden lagras.
Slutsats
I Java passeras allt som värde. För objekt passeras en kopia av referensen, men det faktiska objektet i heapen förblir oförändrat (om det är oföränderligt, som String
).
Variabler i stacken lagrar referenser till objekt som finns i heapen. Detta gäller för alla referenstyper, inklusive String
.
1. Vad är en Integer Pool i Java?
2. Hur överförs data i Java, genom referens eller genom värde?
Var allt tydligt?
Tack för dina kommentarer!
Avsnitt 1. Kapitel 2