Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Java hidas?

Sivun loppuun

Tommittaja [13.01.2009 19:30:29]

#

kun katsoo jotain keskusteluja, niin siellä vain sanotaan että java on käsittämättömän hidas yms. onko java oikeasti liian hidas esim pelien tekemiseen?

Metabolix [13.01.2009 19:54:07]

#

Ei ole. Nettihän on pullollaan Java-pelejä. On se kuitenkin usein hitaampi kuin C++, mutta yleensä kaikista hitain on kuitenkin se ohjelmoijan koodi. Hidas koodi on hidasta joka kielellä, ja nopea koodi on hitaallakin kielellä yleensä nopeampaa kuin hidas koodi nopealla kielellä.

Tommittaja [13.01.2009 19:58:01]

#

ok, kiitos vastauksesta, etten heti vaihda c:hen kun häiritsi tuo javan haukkuminen..

Sami [13.01.2009 20:16:11]

#

Jos ohjelma minkä olet tehnyt tai mitä olet tekemässä ei ole liian hidas, niin ei se ohjelmointikielikään siinä tapauksessa voi olla liian hidas. Jos taas ohjelma on liian hidas, niin lähes aina vika on koodissa (käytetyissä algoritmeissa) eikä käytetyssä kielessä.

Lisäksi kannattaa miettiä myös käyttötarkoitusta ja kuluvaa koodausaikaa eikä vain koodin nopeutta: esimerkiksi jos ohjelma suoritetaan kerran päivässä ja sen suorittaminen kielellä x kestää 30 sekuntia ja optimoituna tai muutettuna kielelle y se kestäisi vain 1 sekunnin, mutta muutoksiin menisi 20 työtuntia, niin onko muutos sen arvoinen, jos tuloksen saannilla ei ole niin kovin kiire?

JAMSUO93 [13.01.2009 20:46:24]

#

Totuushan on kuitenkin se että java ON hitaanpi, koska sitä tulkataan suorituksen aikana. Mutta onko taas sitteen muutaman sekunnin viive ohjelmassa niin merkittävää, kun ottaa huomioon kuitenkin javan hyvät puolet (alustariippumaton, kattava kirjasto)?

Jackal von ÖRF [13.01.2009 20:58:32]

#

Ei Javaa edes tulkata suorituksen aikana kuin vain vähän aikaa - JIT kääntäjä pyöräyttää sen nopeasti natiivikoodiksi. Jos haluat kokeilla, kuinka hidas Java on vain tulkattuna (kuten ennen vuonna 1998 julkaistua Java 1.2:ta), niin anna jollekin Java-ohjelmalle komentoriviparametrinä -Xint niin JVM ainoastaan tulkitsee koodia. Ero on selvästi havaittavissa (esim. ota aikaa, että kauanko jonkin komentoriviohjelman suorittaminen kestää).


EDIT1:

public class Test {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        for (int i = 0; i < 1000 * 1000 * 1000; i++) {
        }
        long end = System.currentTimeMillis();
        System.out.println((end - start) + " ms");
    }
}

Yllä olevan esimerkkikoodin (kasvatetaan kokonaislukua miljardi kertaa) suoritusaika on koneellani (C2Q6600 @ 3.0 GHz) seuraavilla komentoriviparametreillä:

Parametrit  Suoritusaika
-Xint       9781 ms (koodia vain tulkitaan, JIT ei käytössä)
-client      454 ms (oletuksena Java käyttää tätä Client VM:ää)
-server        0 ms (ilmeisesti Server VM optimoi tuon luupin pois)

EDIT2:

Tässä hieman parempi microbenchmark, jota Server VM ei osaa optimoida pois. Otetaan aikaa, että kauanko kestää laskea Fibonaccin lukujonon 42. numero (erittäin naiivilla algoritmilla).

public class Test {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        int x = fib(42);
        long end = System.currentTimeMillis();
        System.out.println((end - start) + " ms");
        System.out.println(x);
    }

    private static int fib(int n) {
        if (n > 1) {
            return fib(n - 1) + fib(n - 2);
        } else {
            return n;
        }
    }
}

Suoritin testin Java 1.6.0_11:llä kolme kertaa eri JVM-parametreillä. Koodin suorittaminen tulkittuna on noin kymmenen kertaa hitaampaa kuin Java normaalisti.

-server
2297 ms
2296 ms
2297 ms

-client
2578 ms
2563 ms
2578 ms

-Xint
25500 ms
25500 ms
25500 ms

Päärynämies [13.01.2009 21:44:45]

#

Ei kannata olla huolisssaan noista nopeuseroista kun taidat Tommittaja vielä ohjelmointiurasi alussa vielä olla. Opettele ensin ohjelmoinnin perusjuttuja. Sitten, jos sille nopeuskriittiselle ohjelmoinnille tulee oikeasti tarvetta, niin voit helposti opetella sen nopeamman kielen. Javalla pärjää melko pitkälle. Pelejäkin sillä saa aikaiseksi.

Tuntuu, että Javaa moni (mahdollisesti ilman parempaa tietoa) sanoo hitaaksi, koska niin on tapana sanoa. C:llä taas on nopean kielen maine. Toki C:llä saat ohjelmia nopeammaksi kuin Javalla, mutta ei se tosiaan automaattisesti tapahdu, kuten on jo keskustelussa todettu. Käytetyt algoritmit ja tietorakenteet näyttelevät suurta osaa tässä.

Tommittaja kirjoitti:

ok, kiitos vastauksesta, etten heti vaihda c:hen kun häiritsi tuo javan haukkuminen..

Ei kannata olla heti kieltä vaihtamassa, jos joku sanoo jotain pahaa käyttämästäsi kielestä. Jokaisella kielellä on ne huonot puolensa. Voitaisiin tuota C:täkin vielä haukkua (mistä tosin ei juurikaan hyötyä taida olla), jotta valintasi tuntuisi paremmalta.

PS. Miten jotain kieltä voi sanoa hitaaksi? Onko jossain määritelty milloin ohjelmointikieli on hidas?

PSS. Niin ja assemblyllähän saa mahdollisesti vielä nopeampia ohjelmia kuin C:llä.

Tommittaja [13.01.2009 21:48:29]

#

toi mun "etten heti vaihda c:hen" oli vaan tollanen sarkastinen heitto, mutta kyllä, olen ohjelmointiurani alussa ja eniten muistia vievä ohjelmani oli varmaankin numeronarvauspeli parseintillä :D

kayttaja-2791 [13.01.2009 22:12:16]

#

Java on mielestäni erinomainen valinta aloittelevan ohjelmoijan kieleksi. Todella monipuolinenkin, hyvät kehitysalustat, laajasti tuettu. Lisäksi toimii lähes kaikilla alustoilla, ja vieläpä on versiot mobiilisoftille (Java ME), webbisovelluksille (Java EE) ja Androidikihan sitä rynnii markkinoille Javan voimin. Joten Javan osaamisella voikin tehdä kaikenlaista.

Toki onhan sillä heikkouksiakin, mutta milläpä kielellä ei olisi.

Saapa nähdä koska OP:hen tulee oma alue Javalle, melkeinpä kaikki "Muut kielet" keskustelualueen viesteistä näyttävät koskevan Javaa.

Tommittaja [14.01.2009 08:29:43]

#

JTS kirjoitti:

melkeinpä kaikki "Muut kielet" keskustelualueen viesteistä näyttävät koskevan Javaa.

niin kai nyt, koska suurin osa on minun viestejäni.. :D

Edit: hups, onhan siellä näköjään muidenikin java viestejä, kun menee ekalta sivulta poies..

rautamiekka [15.01.2009 12:42:01]

#

Todellakin, riippuu koodista ennemmin. Esimerkkinä RuneScape. Alussa peli pyöri hyvin (tarpeeksi hyvin) kun pelikin oli vielä pieni. RS2:sen tultua ja Classicin kuoltua peli kasvoi niin suureksi että se todellakin kävi hitaaksi (grafiikan piirto takkuili) joten sitä alettiin väsäämään tarkemmin. Pelistä tuli jo 5 kertaa suurempi kuin Classic mutta suorituskyky palautui ja jopa nousi moninkertaiseksi. Nyt peli on jättimäinen ja pyörii puhtaasti OpenGL:llä kun aiemmin se pyöri kömpelöllä Javan Software-modella.

Ei pidä unohtaa vielä toista esimerkkiä: veli sanoi että alkuperäisen MoparScapen client.java oli yli 5Mt (muistan sen hyvin) kun sisälsi kaiken mitä pelaaja saattoi tehdä ja peli lagasi niin servulla kuin clientilla. Kun vihdoin koodi jaettiin muutamaan kymmeneen tiedostoon, kaikki lagi lähti eikä tullut takaisin.

Mitä tulee vielä "Java vai C ?", Antti Laaksonen jossain (VB-)tredissä(ni) sanoi että C-kieli on erittäin vanha kieli ja VB nykyaikainen ja ohimennen mainitsi Javan potkivan C:eetä ympäri maapalloa nou trouble.

ville-v [15.01.2009 12:43:36]

#

rautamiekka kirjoitti:

Mitä tulee vielä "Java vai C ?", Antti Laaksonen jossain (VB-)tredissä(ni) sanoi että C-kieli on erittäin vanha kieli ja VB nykyaikainen ja ohimennen mainitsi Javan potkivan C:eetä ympäri maapalloa nou trouble.

Toisaalta nykyään käytetään myös C++:aa.

os [15.01.2009 13:09:34]

#

Vertaus on aika huono, koska Javan pahin vihollinen ei ole C, vaan käsittääkseni Microsoftin .NET-järjestelmä. C-kielelle on edelleen hyvin paljon käyttöä sellaisissa paikoissa, joihin esimerkiksi Java ei oikein taivu, kuten sulautettujen järjestelmien ohjelmointi.

Antti Laaksonen [15.01.2009 13:13:10]

#

rautamiekka kirjoitti:

Antti Laaksonen - - ohimennen mainitsi Javan potkivan C:eetä ympäri maapalloa nou trouble.

En ole koskaan väittänyt tällaista.

JAMSUO93 [16.01.2009 01:24:36]

#

jokainen kieli soveltuu eri tavalla eri tarkoituksiin. mutta mainittakoon, että javalla et voi ohjelmoida vaikkapa uutta käyttistä, c/c++ pystyy

Matso [16.01.2009 08:41:23]

#

JAMSUO93 kirjoitti:

jokainen kieli soveltuu eri tavalla eri tarkoituksiin. mutta mainittakoon, että javalla et voi ohjelmoida vaikkapa uutta käyttistä, c/c++ pystyy

Ja C++:lla et voi ohjelmoida selainsovelmia tai kännypelejä(tai emt, mut yleensä ne on kyllä Javaa).

Noni ollaan tasoissa, ei haukuta Javaa ;D

Tzaeru [16.01.2009 09:58:39]

#

Matso kirjoitti:

JAMSUO93 kirjoitti:

jokainen kieli soveltuu eri tavalla eri tarkoituksiin. mutta mainittakoon, että javalla et voi ohjelmoida vaikkapa uutta käyttistä, c/c++ pystyy

Ja C++:lla et voi ohjelmoida selainsovelmia tai kännypelejä(tai emt, mut yleensä ne on kyllä Javaa).

Noni ollaan tasoissa, ei haukuta Javaa ;D

Varsinkin uudemmissa mobiililaitteissa ne softat on kyllä suht pitkälti C++:aa, toki Javaakin näkee.

C++:n avulla voi tehdä tasan kaiken mitä Javalla ja enemmän.

Toisaalta tiiliskivillä ja laastilla rakennat vaikka minkämuotoisen talon, mutta siinä vaiheessa kun olet rakentanut ensimmäisen tyylikkään omakotitalosi on naapuri rekalla, elementtipaloilla ja nostokurjella rakentanut kokonaisen kaupungin.

E.K.Virtanen [16.01.2009 10:13:19]

#

Opettele ohjelmoimaan sillä kielellä mikä kivalta tuntuu. Suorituskyky yms. tulevat sitten ajallaan. Java on hyvä kieli lähteä liikkeelle, aivan kuten python, c, php, basic...
Mielipiteitä puolesta ja vastaan tulee, valitsit minkä kielen tahansa.

Matso [16.01.2009 11:19:24]

#

Tzaeru kirjoitti:

C++:n avulla voi tehdä tasan kaiken mitä Javalla ja enemmän

Jooh.. mut jos puhuttais vaikka siitä, mitä milläkin käytännössä voi tehdä, joka on aivan eri asia kuin mihin se teoriassa pystyy.

Esimerkiks webbiselaimiin ei ole sellaista lisäosaa, että voisit tehdä C++:lla sen päällä toimivia sovelmia. (Javassa applet). Voit toki koodata ensin Firefoxiin tällaisen lisäosan ja sitten tehdä sen sovelmas, mutta se ei ole realistista eikä toimivaa, koska sillä ei saa mitään todellista hyötyä = käyttäjiä.

Teoriassa voidaan mennä aina vaan kauemmas ja epärealistisempiin menetelmiin, mutta niillä kun ei ole käytönnön kanssa mitään tekemistä.

Sisuaski [16.01.2009 13:29:49]

#

Matso kirjoitti:

Esimerkiks webbiselaimiin ei ole sellaista lisäosaa, että voisit tehdä C++:lla sen päällä toimivia sovelmia.

Eipäs unohdeta Googlen native client -härpäkettä (jolla ainakin teoriassa voisi jos sen saisi toimimaan)!

ville-v [16.01.2009 14:36:02]

#

Matso kirjoitti:

Esimerkiks webbiselaimiin ei ole sellaista lisäosaa, että voisit tehdä C++:lla sen päällä toimivia sovelmia. (Javassa applet). Voit toki koodata ensin Firefoxiin tällaisen lisäosan ja sitten tehdä sen sovelmas, mutta se ei ole realistista eikä toimivaa, koska sillä ei saa mitään todellista hyötyä = käyttäjiä.

Onko Adobe Flash tuttu nimi?

User137 [17.01.2009 20:36:31]

#

Ei ole vielä tullut vastaan Java tai flash peliä jossa on käytössä sulava 3D grafiikka sekä yhtä nopea näppäimistön/hiiren käyttö (input lag) kun perinteisillä ohjelmointikielillä. Latausajat?

kayttaja-2499 [17.01.2009 21:41:12]

#

JAMSUO93 kirjoitti:

jokainen kieli soveltuu eri tavalla eri tarkoituksiin. mutta mainittakoon, että javalla et voi ohjelmoida vaikkapa uutta käyttistä, c/c++ pystyy

http://en.wikipedia.org/wiki/JavaOS
http://www.jnode.org/
...

Jackal von ÖRF [17.01.2009 21:42:59]

#

User137 kirjoitti:

Ei ole vielä tullut vastaan Java tai flash peliä jossa on käytössä sulava 3D grafiikka sekä yhtä nopea näppäimistön/hiiren käyttö (input lag) kun perinteisillä ohjelmointikielillä. Latausajat?

http://www.banghowdy.com/
http://bytonic.de/html/jake2.html

kayttaja-2791 [18.01.2009 00:33:50]

#

User137 kirjoitti:

Ei ole vielä tullut vastaan Java tai flash peliä jossa on käytössä sulava 3D grafiikka sekä yhtä nopea näppäimistön/hiiren käyttö (input lag) kun perinteisillä ohjelmointikielillä. Latausajat?

Mielenkiinnolla odotamme Quake Liveä :)

User137 [18.01.2009 14:45:45]

#

Jackal von ÖRF kirjoitti:

http://bytonic.de/html/jake2.html

Voi hyvä luoja! Tuo toimii paremmin kun alkuperänen O.o Maksimi resoluutio, äänet jne ilman pienintäkään lagia missään. Njoo kai sillä Javalla sitten sais ihan ammattitason pelejäkin. Muistelin kokeilleeni tuota joskus mutta en ihan tätä odottanut.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta