ei-staattisen?
Vastaukset 3
- tällänen
"As their name implies, instance methods execute instantly, while static methods..." :)
- void static
Staattinen metodi on nopeampi koska siinä metodille ei tarvitse välittää this-parametria.
- kumpi&kampi
Ei näytä olevan käytännön eroa. Kokeilin alla olevalla ohjelmalla (joka laskee kuinka monta kutsua minuutin aikana ehditään kutsua). Vaihtelemalla kasvata -metodia staattiseksi ja ei staattiseksi, niin samanlaisia arvoja ohjelma käytännössä antoi riippumatta metodin tyypistä.
--- ALKAA ---
public class Laskuri extends Thread {
long arvo;
boolean loppu;
public static void kasvata(Laskuri laskuri) {
laskuri.arvo ;
}
public void run() {
while(!loppu) kasvata(this);
}
public static void main(String[] args) throws InterruptedException {
Laskuri laskuri = new Laskuri();
laskuri.start();
Thread.sleep(1000*60);
laskuri.loppu = true;
System.out.println("Laskuri pääsi arvoon: " laskuri.arvo);
}
}
--- LOPPUU ---
Tavuu koodissa javap näyttää seuraavaa eroa:
--- ALKAA: EI-STAATTINEN ---
public void kasvata(Laskuri);
Code:
0: aload_1
1: dup
2: getfield #20; //Field arvo:J
5: lconst_1
6: ladd
7: putfield #20; //Field arvo:J
10: return
public void run();
Code:
0: goto 8
3: aload_0
4: aload_0
5: invokevirtual #24; //Method kasvata:(LLaskuri;)V
8: aload_0
9: getfield #26; //Field loppu:Z
12: ifeq 3
15: return
--- LOPPUU ---
--- ALKAA: STAATTINEN ---
public static void kasvata(Laskuri);
Code:
0: aload_0
1: dup
2: getfield #20; //Field arvo:J
5: lconst_1
6: ladd
7: putfield #20; //Field arvo:J
10: return
public void run();
Code:
0: goto 7
3: aload_0
4: invokestatic #24; //Method kasvata:(LLaskuri;)V
7: aload_0
8: getfield #26; //Field loppu:Z
11: ifeq 3
14: return
--- LOPPUU ---
Kuten joku jo totesi, niin ei-staattisessa metodissa pinoon laitetaan hieman enemmän tavaraa, mikä näkyy tuossa tavukoodissakin rivinä: "4: aload_0". Tuo yksi koodirivi kasvattaa suoritettavan koodin määrää n. 7 %:lla, mutta siltikään se ei näytä tulosten valossa vaikutavan nopeuteen. Kaikkihan riippuu loppujen lopuksi siitä, miten Java virtuaalikone kone on tehty, eli miten se suorittaa tuota koodia.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Olivia Oras
"Yle MOT:n tietojen mukaan Oras oli joutunut sairaalahoitoon helsinkiläisellä kauneusklinikalla tehdyn rasvaimun yhteyde1552207MOT: Nuoren Olivia Oraksen, 27 surullinen kuolema kauneusoperaatiossa :(
MOT:n tietojen mukaan Oras menetti tajuntansa rasvaimua edeltäneessä puudutuksessa. Hänet kuljetettiin Husiin, ja hän ku1371252- 1421185
Haluatko että unohdan sinut kokonaan
Siihen suuntaan ollaan menossa, nyt jo. Ja ehkä parempi näin, niin ei kulu energiaa hukkaan mahdottomuuteen. Ja vaikka j751003- 47991
- 60926
- 80761
- 38737
- 34707
Ylen typerät rinnastukset.
Näin YLE…..Saksassa ei ole äärioikeisto ollut vallassa sitten Hitlerin . YLEn toimittajille tiedoksi . Hitler oli Saksan247682