onko staattisen metodin kutsu

hitaampi kuin

ei-staattisen?

3

403

    Vastaukset 3

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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

    1. Yli 3 Vuotta sinä jaksoit

      ja yrititit ottaa selvää minusta. Aika hämmästyttävää. Naiselle.
      Ikävä
      78
      976
    2. Mikä minussa sitten

      Kiihottaa enemmän kuin muissa?
      Ikävä
      73
      842
    3. Jasmin Vähäkangas paljastelee

      Eilinen päivä on heillä kulunut biitsillä niin silloin tuo äiti ihminen on intoutunut paljastelemaan kunnolla. Laittanut
      Kotimaiset julkkisjuorut
      101
      576
    4. Taidan lähettää kaveripyynnön

      Sulle nainen. Otan vaan rohkaisuryypyn ensin.
      Ikävä
      43
      575
    5. Mikä on viimeinen

      este joka vielä pitää sinut ja kaivattusi erillään?
      Ikävä
      45
      533
    6. Kangaskylän alkoholi-hurjastelijat

      Oppi olkoon että autollessa etanoli kuuluu pääasiassa 95 E10 polttoaineseen, siihenkin vain enimmillään 10% vahvuisena t
      Hyrynsalmi
      4
      516
    7. Miehet lähtevät itse pois deittailumarkkinoilta

      Ovat saaneet tarpeekseen naisista. Tyypillisin poistuja on: Koulutettu, työssäkäyvä, etsii pitkäaikaista parisuhdetta.
      Sinkut
      160
      507
    8. Ei mulle kelpaa kukaan muu...

      Kuin "hän"
      Ikävä
      27
      507
    9. Oikea nainen

      On äärimmäisen naisellinen, pienikokoinen, kapeaharteinen, pienet kapeat kasvot, paksut huulet, kauniit hiukset, upeat t
      Sinkut
      133
      490
    10. Olen pahoillani mies ihan kaikesta

      Et sinä ole edes tehnyt mitään väärää. Eihän kenestäkään ole pakko tykätä. Pyydän anteeksi kaikkea häiriköintiä, joka on
      Ikävä
      60
      475
    Aihe