Kurssisisältö
Java Laajennettu
Java Laajennettu
Datan Siirto Javassa
Miten tietoa siirretään Javassa?
Tiedät edellisestä kurssista, että on olemassa kaksi muistityyppiä - pino ja keko. Tarkastellaan, miten data tallennetaan näihin kahteen muistialueeseen:
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; } }
Olemme luoneet 3 erilaista muuttujaa. Alla on kaavio, joka havainnollistaa, miten ja minne ne tallennetaan muistiin:
Käydään läpi, mitä havaitsit kaaviossa:
- Näemme
String
-kenttiä pino-muistissa, jotka ovat viitteitä keon muistissa oleviin arvoihin. Näin emme käytä keon muistia suoraan joka kerta. Sen sijaan pääsemme ensin käsiksi viitteeseen pino-muistissa, mikä on nopeampaa kuin keon muistin käyttäminen. Olet jo kohdannut viitteitä arvoihin oppiessasi String Pool -aiheesta; - Voit huomata, että
int
ei tallennu keon muistiin; sen arvo tallennetaan suoraan pino-muistiin. Tämä koskee kaikkia primitiivisiä tietotyyppejä (byte
,short
,int
,long
,float
,double
jaboolean
). Näin ollen primitiiviset tietotyypit välitetään Javassa arvon mukaan. KuitenkinString
ei ole primitiivinen tietotyyppi, joten sen arvo tallennetaan keon muistiin; - Jokaiselle uudelle viitteelle luodaan uusi olio keon muistiin. Jos kuitenkin kahdella saman tyyppisellä muuttujalla on sama arvo, ne viittaavat samaan olioon keon muistissa;
- Integer Pool on alue pino-muistissa, jossa kaikki kokonaislukuarvot välillä
-128
ja127
ovat linkitettyinä. Tämä optimointi tehdään, jotta numeroiden käsittely olisi tehokkaampaa Javassa, koska tämän alueen luvut ovat yleisimmin käytettyjä. Muista, että pino-muisti toimii nopeammin kuin keon muisti, joten saamme nopeammat vasteet Integer Poolin ansiosta; - String Pool on alue keon muistissa, jossa identtiset merkkijonot tallennetaan.
Yhteenveto
Javassa kaikki välitetään arvon mukaan. Olioiden kohdalla välitetään viitteen kopio, mutta varsinainen olio keossa pysyy muuttumattomana (jos se on muuttumaton, kuten String
).
Muuttujat pinossa tallentavat viitteitä olioihin, jotka sijaitsevat keossa. Tämä koskee kaikkia viitetyyppejä, mukaan lukien String
.
1. Mikä on Integer Pool Javassa?
2. Kuinka data siirretään Javassa, viitteenä vai arvona?
Oliko kaikki selvää?
Kiitos palautteestasi!
Osio 1. Luku 2