Java ja käännetyn kielen nopeusero

Pohdintaa...

Mikä mahtaa olla suoritusnopeuden ero Javan ja vaikka käännetys C-koodin välillä.
En tarkoita kirjastojen tms. nopeuksia vaan ihan puhtaan koodin.

Ihan suuruusluokka olisi riittävä. Onko Java 3,10, 30, 100, 300, 1000 -kertaa hitaampaa ?

8

269

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • pohtija1

      Aluksi:
      Teoriassa pascal on ehkä nopein kieli (väite perustuu embarcadero Delphi/C builder tietoihin) mutta näin se ei käytännössä ole.
      Jos käännät täysin saman lähdekoodin Free Pascal:lla ja Delphillä niin näiden ero on valtava (Delphin hyväksi). Eli nopeusero johtuu kääntäjän toteutuksesta ei kielestä (lähdekoodi on sama).

      Periaatteessa C-koodi on nopeampaa kuin Java koodi.

      Mutta kun vertaillaan jonkun tekemä C-koodia ja hänen (tai jonkun muun ) tekemää java-koodia havaitaan että java -koodi on nopeampaa!.
      Java koodin nopeus perustuu kääntäjän ajonaikaiseen optimointiin. Vaikka C-kääntäjäkin optimoi koodin on todennäköisempää että sama (perustasoinen) koodari ei pysty tekemään sellaista koodia C:llä joka olisi hänen Java-koodia nopeampaa.

      Eli todellisuudessa eri kielten vertailua hankaloittaa eri kääntäjä (valmistaja) toteutukset (vrt Delphi - Free Pascal -> täysin sama koodi mutta suuri nopeusero. Tosin Free Pascal koodikaan, ei ole hidasta!)

      Eri kielten ero jolloin nopein toteutus voi olla erilainen.

      Mutta suosittelen jonkin yliopistotasoisen tietorakenteet -kurssin käymistä ellet ole jo sellaista suorittanut (Jolloin pitäisi ymmärtää että väärä algoritmi väärässä paikassa voi aiheuttaa aivan älyttömiä eroja).

      • Pohdintaa

        Voisitko ystävällisesti lukea kysymykseni uudelleen ja vastata asiaan jos tiedät siitä jotain.

        Tulkitsen muuten että sinun mielestäsi Java tulkki ajaa samanlaista peruskoodia yhtä nopsaan kuin mitä käännetty C-koodi juoksee.


      • pohdintaaa
        Pohdintaa kirjoitti:

        Voisitko ystävällisesti lukea kysymykseni uudelleen ja vastata asiaan jos tiedät siitä jotain.

        Tulkitsen muuten että sinun mielestäsi Java tulkki ajaa samanlaista peruskoodia yhtä nopsaan kuin mitä käännetty C-koodi juoksee.

        Jos et ole perehtynyt miten tehdä nopeita ohjelmia niin on hyvin todennäköistä että sinun tekemäsi koodi on yhtä nopeata Javalla ja C:llä.

        Mieti vielä mitä tuossa yllä sinulle vastattiin.


      • Pohdintaa kirjoitti:

        Voisitko ystävällisesti lukea kysymykseni uudelleen ja vastata asiaan jos tiedät siitä jotain.

        Tulkitsen muuten että sinun mielestäsi Java tulkki ajaa samanlaista peruskoodia yhtä nopsaan kuin mitä käännetty C-koodi juoksee.

        Sanotaan näin että sovellusohjelmoijalle asialle ei ole mitään merkitystä. Kieli valitaan ympäristön/ekosysteemin tai jonkun hassunhauskan ominaisuuden mukaan. Suorituskyky ei ole mikään ongelma.

        Lähinnä Javascriptin ero natiiviin on jo sellainen että voi jossain raskaammassa miettiä toista tapaa kun puhutaan 10x eroista.


    • 20Vkoodausta

      Asia ei ole noin yksinkertainen, sillä C-koodista käännetään binäärikoodia, joka ajetaan sellaisenaan, kun taas Java koodia ajetaan Javan-virtuaalikoneella joka voi mukautua ajettavan koodin mukaan.

      C-kielessä jos FOR-silmukan sisällä kutsutaan funtiota, niin se on aina yhtä nopea.

      Javassa jos for-silmukan sisällä kutsutaan funtiota, niin Java-virtuaalikone voi ajon aikana huomata että tuossa funktiossa vieraillaan hullun paljon, jolloin se kopioi funtion sisältämän koodin ajanaikana FOR-loop koodin sisään, jolloin erillistä funtiokutsua ei tarvita. Koodi voi siis nopeutua kun sitä ajetaan tarpeeksi kauan. Eli Java voi joskus olla nopeampi kuin C-kieli jos koodia ei ole optimoitu.

      Tietysti Javan käynnistys vie aikaa, joten kerroin voi olla mitä vain, jos kyseessä on lyhyt C-ohjelma joka lopettaa itsensä millisekunneissa. Jos taas ohjelmaa ajetaan "ikuisesti", niin Javan-optimointi voi muuttaa tilannetta.

      Ajatteleppa kysymystä; kumpi on nopeampi auto vai kävely. Luulisit että auto, mutta mittaappa mitä vie siirtyä kävellen tai autolla metrin verran. Kävellen yksi askel, autolla autoon nousu, käynnistys, lyhyt rullaus eteenpäin, ja autosta nousu. Oho, aina auto ei olekkaan nopein. Joskus auto on Java joskus C, aina tilanteesta eli ohjelmasta riippuen.

      Jos oikeasti optimoidaan, niin uskon että C voittaa aina, mutta Java-vituaalikoneen ominaisuudet ovat sen verran edistyneitä että eivät tavalliset harrastelijat edes tiedä mitä kaikkea ne tekevät, joten vastaaminen on vaikeaa tai vastaukset hatusta vedettyjä. Ei ole olemassa mitään kerrointa.

    • tehdäänteoriaaaina

      Teoriassa on aina hyvä puhua, minäkin voin sanoa että "TEORIASSA", java-kieli paihihttää optimoidun assembly-kielen, mennen tullen laskutoimituksissa.

    • eirelevanttia

      Kaikki kielet kääntyvät lopuksi konekoodille, muutoihan prossu ei sitä ajais jotta vertailu aika turhaa. Kielten käyttötarkoitus muutoinkin täysin erilainen, jotta ei niitä voi verrata suoraan esim. "tee tämä algoritmi molemmilla ja vertaa". Sama ku sanois, että kummallako pääsee nopeemmin siwaan ladalla vaiko 500s mersulla.

    • 1+12

      Kaikkia kieliä ei käännetä (osa tulkataan, hitaampi).
      Jos valitaan sopimaton algoritmi niin ratkaisu voi olla älyttömän hidas.
      On ymmärrettävä mikä algoritmi sopii lopulliseen ratkaisuun.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Tänään pyörit ajatuksissa enemmän, kun erehdyin lukemaan palstaa

      En saisi, silti toivon että sinä vielä palaat ja otetaan oikeasti selvää, hioituuko särmät ja sulaudummeko yhteen. Vuod
      Ikävä
      22
      5234
    2. Huomenta ihana

      Kauniskasvoinen ihanuus 😘 saan sut vielä
      Ikävä
      25
      4398
    3. Hei rakas...

      Miten on työpäivä sujunut? Rakastan sinua 💗
      Ikävä
      28
      2541
    4. Edelleen sitä on vaikea uskoa

      Että olisit oikeasti rakastunut muhun
      Ikävä
      34
      2264
    5. Toiveikas vai toivoton

      torstai? Ajatuksia?
      Ikävä
      37
      2008
    6. Vitsi mihin menit. Heti takasin.

      Mä näin sut tuu takasin! Oli kiire, niin en ehtiny sin perään!
      Ikävä
      15
      1928
    7. En ole koskaan kokenut

      Ennen mitään tällaista rakastumista. Tiedän että kaipaan sinua varmaan loppu elämän. Toivottavasti ei tarvitsisi vain ka
      Ikävä
      19
      1617
    8. Mukavaa päivää

      Mun rakkauden kohteelle ❤️ toivottavasti olet onnellinen
      Ikävä
      12
      1541
    9. Voi ei! Jari Sillanpää heitti keikan Helsingissä - Hämmästyttävä hetki lavalla...

      Ex-tangokuningas on parhaillaan konserttikiertueella. Hän esiintyi Savoy teatterissa äitienpäivänä. Sillanpää jakoi kons
      Suomalaiset julkkikset
      21
      1277
    10. Kerranki asiat oikein

      Ilkka ja muut pienpuolueeet...teitte hyvän työn kun valitsitte pätevän henkilön virkaan eikä kepulle passelia!! Jatkakaa
      Haapavesi
      10
      1194
    Aihe