ei-staattisen?
onko staattisen metodin kutsu
3
379
Vastaukset
- 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
Sanna Marin kysyi hämmästyneenä: Onko Suomessa jäänmurtajia?
Nettilehden toimittaja kysyi Sanna Marinilta suoraan, että sovittiinko nuo jäänmurtajien kaupat jo 2019, jolloin Marin k1605110- 1944061
SDP haluaa 40 000 nettomaahanmuuttajaa
SDP:n Suunnanmuutos-vaihtoehtobudjetissa, käy ilmi, että demarit itse asiassa vaativat räjähdysmäistä ”työperäisen” maah1403715Orpo: Velkajarrua vastustavaa puoluetta vaikea ajatella hallitukseen
No Minja Koskelan kommunistipuolue jäi ulos tuosta. Kaikki eduskuntapuolueet vasemmistoliittoa lukuun ottamatta sopivat553029Mikä tuota vasemmistolaisista jankkaavaa vaivaa?
Pahasti on ihon alle, siis korvien väliin, päässeet kummittelemaan. Ei ole terveen ihmisen merkki jankata yhdestä asia522986- 1461987
Nyt meni lopulliset lämmöt.
Alan käyttäytymään yhtä kylmästi miehiä kohtaan kuin mua kohtaan on käyttäydytty ja vain käytetty viimeiset pari vuotta441747Hienoa! Eduskunta luopui käteisen käytöstä
Nyt tuo sama muutos pitää saada myös muuhun yhteiskuntaan. Käteistähän ei tarvitse tänä päivänä enää kuin rikolliset.361499Onko erityinen paikka jossa haluaisit nyt olla
Onko joku spesiaali lempipaikka missä mieluiten olisit?631434Orpo loukkaantui fasismiin viittaavasta sanavalinnasta
Mutta miksi loukkaantui? Orpohan on tehnyt yhteistyötä fasistien kanssa jo vuonna 2019, siis jo neljä vuotta ennen loukk261319