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

273

    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. Mitään järkeä?

      Että ollaan erillään? Kummankin pää on kovilla.
      Ikävä
      127
      1964
    2. Noniin rakas

      Annetaanko pikkuhiljaa jo olla, niin ehkä säilyy vienot hymyt kohdatessa. En edelleenkään halua sulle tai kenellekään mi
      Ikävä
      100
      1720
    3. Lasten hyväksikäyttö netissä - Joka 3. nuori on saanut seksuaalisen yhteydenoton pedofiililtä

      Järkyttävää! Lapsiin kohdistuva seksuaalinen hyväksikäyttö verkossa on yhä pahempi ongelma. Ulkolinja: Lasten hyväksikäy
      Maailman menoa
      57
      1360
    4. Kumpi vetoaa enemmän sinuun

      Kaivatun ulkonäkö vai persoonallisuus? Ulkonäössä kasvot vai vartalo? Mikä luonteessa viehättää eniten? Mikä ulkonäössä?
      Ikävä
      76
      1320
    5. Multa sulle

      Pyörit 24/7 mielessä, kuljet mun mukana, mielessä kyselen sun mielipiteitä, vitsailen sulle, olen sydän auki, aitona. M
      Ikävä
      31
      1028
    6. Mies, eihän sulla ole vaimoa tai naisystävää?

      Minusta tuntuu jotenkin, että olisit eronnut joskus, vaikka en edes tiedä onko se totta. Jos oletkin oikeasti edelleen s
      Ikävä
      47
      926
    7. Nainen, olen tutkinut sinua paljon

      Salaisuutesi ei ole minulle salaisuus. Ehkä teimme jonkinlaista vaihtokauppaa kun tutkisimme toisiamme. Meillä oli kumm
      Ikävä
      51
      923
    8. Onko sulla empatiakykyä?

      Etkö tajua yhtään miltä tämä tuntuu minusta? Minä ainakin yritän ymmärtää miltä sinusta voisi tuntua. En usko, että olet
      Ikävä
      44
      882
    9. Tavoitteeni onkin ärsyttää

      Sua niin turhaudut ja unohdat koko homman
      Ikävä
      109
      853
    10. Ei se mene ohi ajan kanssa

      Näin se vaan on.
      Ikävä
      73
      846
    Aihe