onko staattisen metodin kutsu

hitaampi kuin

ei-staattisen?

3

395

    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. Veroaste on Suomessa viitisen prosenttiyksikköä liian matala

      Veropohjaa on rapautettu käytännössä koko kulunut vuosituhat, jonka vuoksi valtion menoja on jouduttu rahoittamaan velka
      Maailman menoa
      102
      2605
    2. Kyläkauppias ajoi kännissä töistä kotiin

      Ei edes kallis auto estä humalassa ajamista, vaikka luulisi alkolukko olevan sellaisessa jo vakiovarusteena. https://ww
      Maailman menoa
      101
      1647
    3. Tiedän satavarmasti ettet tule koskaan

      Uskaltamaan mitään. Ei me tulla edes näkemään koskaan.
      Ikävä
      67
      1505
    4. EU komissio - EU-elpymisrahoja voidaan käyttää TILAPÄISESTI väärin!

      Espanja ohjasi miljardeja euroja – Nyt EU-komissio teki yllättävän paljastuksen Skandaaliksi noussut Espanjan EU-rahoje
      Maailman menoa
      14
      1226
    5. Kiitos upeasta palvelusta kukkamyyjä

      Kiitos sinulle upea kaunis kukkamyyjä Kuhmon torilla 🌹 Upea iloinen asenteesi ja kaunis hymysi pelasti päiväni ❤️ Jäi
      Kuhmo
      21
      1017
    6. Miks me oikein

      Rakastuttiin vaikka kaikki on mahdotonta?
      Ikävä
      81
      963
    7. Miehet trikoissaan

      On se kauhian näkköistä, kun miehet tiukossa trikkoissa juoksentelloo ja mulukku paestaa trikkoijjen läpi. Kahtokkee pe
      Suomussalmi
      45
      911
    8. Ratikka Turkuun

      Ei hyvä. Ja syy on siinä , kukaan ei osaa suunnitella oikeaa reittiä. Pitää huomioide, kiskoja sijaintia ei voi muutta
      Turku
      119
      886
    9. Koko kansan kaste Punaisen meren ylityksen aikana

      Koko Israelin 2,5 milj.kansa sai kasteen ja Pyhän Hengen lahjan ylittäessän Punaisen meren. 1.Kor.10 1 Sillä minä en ta
      Kaste
      334
      814
    10. Nainen, mikset lähetä

      miehelle viestiä? Tiedän, että sulla on asiaa ja kysyttävää.
      Ikävä
      54
      813
    Aihe