Lehetne gyorsabb java c
De néha már józan, amikor azt hiszem, egy ilyen összehasonlítás, minden vágyam, hogy megértsük, miért Java elvileg nem lehet, hogy gyors, de legalábbis nem lassabb, mint a C ++, nincs érv, sőt magának.
Először is néhány „adott”:
Tegyük fel, A - a lineáris sebesség a gép mikor. B - az elkészítés sebessége JVM bytecode gépi kódra. Ezután a teljes sebességgel a kódot:
Nyilvánvaló, B1 = 0, mert a C ++ generál gépi kód közvetlenül, és nem igényel további munkát végezni folyamatokat. B2 de egyáltalán nem nulla, mert nem számít, mennyire volt hatékony a nem JIT fordító, mindig igényel némi időt fordítani. Sőt, JIT összeállítása nem egyszerre, és a „podkompiliruet”, mint halad végrehajtási utakat. Kiderül, mindig van egy nem nulla a valószínűsége, hogy hirtelen kell futtatni a kódot, amely korábban nem szükséges, és ez időt vesz igénybe, annak összeállítása. Még ha feltételezzük, hogy a JIT fordító kifinomult módszereket előrejelzésére módon és mindent megtesz, hogy csökkentse a B2. B2 de értelemszerűen nem 0. Ha voltak 0, nem lenne JVM, és ez a gép tisztításához kódot.
Ezután úgy az A1 és A2. Ezek a beállítások határozzák meg, hogyan is a fordító generál kódot (vagy byte kód). Az én személyes, szubjektív és elfogult véleményt, C ++ (nem C) nagyobb eséllyel optimalizálása köszönhetően sablonok (a fordító egy teljes szemantikai információt inline'a) és gépi kódját adott platformon (compiler pontosan tudja, hogy melyik gép utasításait Nem lenne maximálisan hatékony minden esetben). Sajnos, nem vagyok igazán jó Java generic'ah, és vezetett csak pletykák, hogy a Java ők „irreális”, írta jóval később rosszabb sablonok a C ++. És mivel a fordítóprogram kell adnia a szabványos hordozható JVM-kódot, akkor nem lehet optimalizálni egy adott platformon. Azt reméljük, hogy ez lehetővé teszi majd a JIT, de nem lesz szemantikai információt mélyebb optimalizálás. És JIT gyorsnak kell lennie, akkor lesz egy kompromisszum optimalizálása a minőség és a fordítási sebesség. A C ++, ez nem probléma, mert akkor össze bármilyen hosszú ideig.
Szóval, ezek az okom, hogy én, mért virtuális papagájok. Ne érts meggyőzni magam, hogy a Java gyorsabb lehet, vagy legalábbis egyenrangú C ++ sebesség. Én szívesen a segítséget a megértése ezt a kérdést.
Mi Stas töltött néhány egyszerű összehasonlítások, elsősorban a végrehajtása gyorsrendezés és a Java kód lineáris sebesség elveszett valahol a 10% -ot.
Magától értetődik, hogy 10% nem mindig az időjárás. Néha a fejlesztés fontos eszközei az önvizsgálat, fejlesztőkörnyezet, ellenőrzött kódok végrehajtását röptében csere és még sok más, ami a Java platform, és nem „Thrasher” C ++. De miért beszélünk a sebesség?