JNI:n hitaus

Kokeilinpa eilen tehdä ensimmäisen natiivimetodin sovellukseen. Homma oli yksinkertainen, kahden isohkon int-taulukon alkioiden yhdistäminen, mahdollisimman monta kertaa sekunnissa.

Täytyy sanoa, että kylläpä yllätyin. C-toteutus on nimittäin JNI:n avulla käytettynä 5 kertaa hitaampi kuin "identtinen" koodi Javalla toteutettuna.

Joo, oli mulla optimointi-hanikat päällä.

Onko kukaan törmännyt vastaavaan? Ratkaisuja? Vinkkejä?
3301
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

Minusta JNI:n tarkoitus ei olekaan olla kauheen tehokas. Käsittääkseni sillä annetaan vain mahdollisuus käyttää sellaisia ominaisuuksia, joita Java ei itse pysty tekeen.

Esimerkiksi saada joku yhteys kerneliin vaikka jonkun .dll:n kautta.

Äänestä
  • Joo. Toki.

    Ja kyllähän natiivirutiinit on nopeampia jos tehtävää on paljon. Kun tein jokaiselle taulukon alkiolle jotain temppuja (sqrt, pow, jne) alkoi ero c:n ja javan nopeudessa tasoittua.

    Ilmeisesti kutsuissa JNI:n läpi tulee melkoisesti overheadia.

    Käytössä on Java 1.4.x. Sunin foorumeilla on näemmä valitettu tästä samasta aiheesta. Ilmeisesti JNI:n käyttö on jopa hidastunut versiosta 1.3...

    No, ei muuta kuin suunnitelmat uusiksi.

    Äänestä

  • JNI:n tarkoitus on olla mahdollisiman tehokas. Jos tutkailet javan sorsia, niin huomaat, että loppujen lopuksi kaikki io, net yms. objektit käyttää JNI:n kutsuja. Java api muodostaa vaan ohjelmointi interfacen, jonka virtuaali kone toteuttaa JNI:n kautta.

    Äänestä

Kommentoi aloitusta


fani kirjoitti:

Kokeilinpa eilen tehdä ensimmäisen natiivimetodin sovellukseen. Homma oli yksinkertainen, kahden isohkon int-taulukon alkioiden yhdistäminen, mahdollisimman monta kertaa sekunnissa.

Täytyy sanoa, että kylläpä yllätyin. C-toteutus on nimittäin JNI:n avulla käytettynä 5 kertaa hitaampi kuin "identtinen" koodi Javalla toteutettuna.

Joo, oli mulla optimointi-hanikat päällä.

Onko kukaan törmännyt vastaavaan? Ratkaisuja? Vinkkejä?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu