onko staattisen metodin kutsu

hitaampi kuin

ei-staattisen?

3

363

    Vastaukset

    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. Riitta-Liisa ja Toni Roponen: Ero! Riitta-Liisa Roponen kertoo asiasta Instagramissa.

      Riitta-Liisa ja Toni Roponen eroavat. Riitta-Liisa Roponen kertoo asiasta Instagramissa. – Talvi on ollut elämäni synk
      Maailman menoa
      68
      2309
    2. Sinä vain tulit elämääni

      Ja joku tarkoitus sillä on ollut. Näyttämään mitä olen ja kuinka arvokas voisin olla. Se muutti ja käänsi elämäni suunna
      Ikävä
      92
      1526
    3. Millaisia ajatuksia on kaivatusta ja tilanteestanne tänään?

      Kerro omista mietteistäsi tai lähetä terveisiä. Ehkä hän lukee ja lähettää sinulle takaisin omia mietteitään.
      Ikävä
      62
      1322
    4. Tiesitkö mies

      Kuinka paljon mulla oli tunteita sua kohtaan? Jos et tiennyt,olisiko tietäminen vaikuttanut tapahtumiin? Ihmettelen kyll
      Ikävä
      71
      1309
    5. Nuorempi mies

      Olen tänään ajatellut sua paljon, miten toimittaisiin makuuhuoneessa jne! 😏🔥
      Ikävä
      127
      1194
    6. Jos siis saamme

      Sen keskusteluyhteyden niin olisitko jo sinäkin rehellinen ❤️🙏 ne jää meidän välisiksi kaikki. Tarvitsemme toisiamme, j
      Ikävä
      90
      1031
    7. Toivottavasti et mussukka elättele toiveita meikäläisen suhteen

      Tiedän mitä olet touhunnut joten aivan turha haaveilla mistään enää 👍
      Ikävä
      125
      1026
    8. Onko sinulla

      Joku nyt huonosti? :(
      Ikävä
      70
      1008
    9. Mies, mitä minun pitäisi tehdä

      Niin, mitä naisen siis pitäisi tehdä, että lähestyisit ja tekisit aloitteen? Mikä on riittävä kiinnostuksen osoitus juur
      Ikävä
      73
      959
    10. Miksi teillä meni...

      ...välit poikki kaivattusi kanssa?
      Ikävä
      116
      936
    Aihe