A Java eléri a teljesítményt c

A Java nyelv egyik legfőbb hátránya hagyományosan a programok alacsony sebessége, a C ++ nyelvű alkalmazásokhoz képest. Az olyan alkalmazások esetében, ahol a platformok közötti hordozhatóság vagy a fejlesztés bonyolultsága nem kritikus, gyakran a sebesség a fejlesztők választotta a C ++-et.

A Java eléri a teljesítményt c

Összehasonlítva a Java vs. C ++

A G ++ (GCC) 3.3.1-vel és a Sun Java 1.4.2_01 verziójával összeállított C ++ programokat összehasonlítottuk. Java programok futtatásához a Sun virtuális gép verzióját 1.4.2_01 használtuk. Mérések Velista laptop Pentium 4 processzor és 512 MB memória, amely fut Red Hat Linux 9 / Fedora Test 1 kernel verzió 2.4.20-20.9 tovább.

A tesztelés során kiderült, hogy a Java-programok teljesítményének kulcsa a virtuális gép konfigurációja. Ahogyan a diagramból látható, az "ügyfél" konfigurációs opció használata esetén (ez alapértelmezés szerint telepítve van), a Java program szinte minden művelete lassabb, mint a C ++ programok, bár nem annyira, mint amit elvárna. De amikor bekapcsolja a "szerver" beállításokat, amelyekben nincsenek olyan szigorú korlátozások az alkalmazott memória mennyiségére vonatkozóan, a legtöbb tesztben az előny a Java oldalán állt. Számos műveletet, például metódushívást és hasmenést végeznek több programban a Java programokban, mint a C ++ programoknál. Azonban a tesztek nagy részében a Java és a C ++ sebességei hasonlónak bizonyultak, ami természetesen a Java lassú munkájának véleménye ellen is szolgálhat.

Eredmények és adatok

A teljes képtelenség nem látta, amikor a gyors program Java-ban, mind a kiszolgáló, mind az ügyfél.

2Znatokam. Az Oracle10g legalább legalábbis be van írva, de a várólistában lévő elmosódott már beépített Java-gép, és kiderült, hogy valami hasonló az Oracle Aplication Server.

Magam dolgozni vizsgálat 3 évig, és belőle nekem, van valami összehasonlítani, teljesítményének vizsgálatára Java alkalmazások még zayavlyayust mivel csak elkezd így hamarosan -kal a ezred :)

válás a szopósok számára.
1. statikusan fordítsd össze a c / c ++ -et és szerezd be a java szerver metódusát a nagysebességű dump-ban
2. Tesztelje a tömb állandó határait? Én együtt vagytok veled srácok! do malloc / new állandó tömbméret nélkül és hajózni. de a tömb határainak ellenőrzése.


haver, nevelkedsz gyerekesen, vagy dolgozol a Napban?

Igen, te, srácok, Java-gép
híres kollektorával együtt
szemetet írnak, mi. legalábbis
a C-on, esetleg akár osztályokat is használhat, és ez már megtörtént
++-tel (arról, hogy mit írjon még mindig nem az asme-ra),
És hogyan képes gyorsabban dolgozni, mint maga.

Ezenkívül, ha a fordítást használják,
az összeállítás idejéért senki sem veszi figyelembe,
összehasonlítva a C ++ és a Java által írt programok végrehajtását.

A C ++ minden lehetőséget kínál az optimalizáláshoz, mert ott
minden egyszerű és egyszerű: az irány index, syyy pointer,
ha nem használ többszörös öröklést - minden
gyors és egyszerű!
A zhave-ban mindentől függ
egy adott gép (fekete doboz) megvalósítása,
azaz egy bizonyos agyában
programozó, aki ezt írta. Azt gondolhatja,
mit optimalizál, és legutóbb nem, nem!
A gép mindent megtesz a saját útján!

Ezután futtathat egy teljes asztali alkalmazást
egy állkapocson valamilyen közepes írógépen (P 1000, 256mb)
-- Nagyon lassul. Nincsenek tesztek
szükséges! Különösen a GUI!

És vegye be a PDA-t - az AWT fékeket ártatlanul és kb
SWING és ne!

Vigyorogva olvastam ezt a cikket.
Úgy gondolom, hogy vannak hibák a tesztekben, például mérik a programok végrehajtási idejét, nem pedig az ugyanazon műveletek elvégzésének idejét. Amikor a Java elindul, a virtuális gépnek először kell elindulnia, akkor meg kell dönteni, hogy a natív kódra fordítanak-e, ha igen, akkor a fordítás elkészül, és csak akkor kezdődik el az algoritmus.
Például a Fibonacci-szám kiszámításakor össze kell hasonlítanunk a számítási algoritmusokat, és minden más nem számítunk bele.

Itt vannak a programok verziói:

#include
#include
#include
névtér std;
nem jelzett hosszú szál (jel nélküli hosszú n) ha (n <2) return(1);
máshogy fib (n - 2) + fib (n - 1);
>
int fő (int argument, char * argv []) int n = ((argc> = 2) .ooi (argv [1]) 1);
struktur timeval bt, et;
gettimeofday (bt, NULL);
jel nélküli hosszú f = fib (n);
gettimeofday (et, NULL);
cout < cout <<"Time: "
<<(float)(et.tv_sec-bt.tv_sec+(et.tv_usec-bt.tv_usec)*1e-6)
< visszatérés (0);
>

import java.util.Date;
public class fibo nyilvános statikus érvénytelen fő (String args []) int n = Integer.parseInt (args [0]);
Dátum bt = új dátum ();
int f = fib (n);
Dátum et = új dátum ();
System.out.println (f);
hosszú dt = et.getTime () - bt.getTime ();
System.out.println ("Idő:" + String.valueOf (dt * 1e-3));
>
nyilvános statikus int (int n) ha (n <2) return 1;
return fib (n - 2) + fib (n - 1);
>
>

Az eredmény meglehetősen váratlan volt:

Duron 750 MHz, 256 MB RAM
OS: Nyissa meg a SuSe Linux 10 operációs rendszert
JVM 1.5

1. A lefordított cikkek olvasásakor feltétlenül meg kell nézni a forrást.
Mert lefordítanak tőlünk. hmm. A fordítók ezt nevezik
"A hírfordítás sajátossága." Ebben az esetben a cím nem fordítódik le
teljesen, ami az érzelmek viharát okozza. Az eredeti cím szerint
Csak egy teljesítményteszt - Nem elfogadó benchmark.
2. Mint mondta, meg kell vizsgálnod azokat a teszteket, amelyek összehasonlításra kerültek.
Valójában a függvényhívás Java-ban sokkal gyorsabb, mint a C ++-ban. ugyanúgy
mint például egy objektum létrehozása
3. Azok számára, akik úgy vélik, hogy a Java egy "Interp_it_tator". Olyan, mint mondani
hogy a C ++ fordítóprogramok nem léteznek, mert a C ++ először C és C-re lett fordítva
csak akkor készít C kódot (és ez egyszer így volt).
Sem Java, sem C # értelmezést használunk, a JIT fordítót használjuk (program
a byte-kódtól lefordítva).

Az eredeti cikknek nincs semmi hibája, a teszteket a lehető legnagyobb őszinteséggel végezték.

By the way, akkor orientálni ezt az értékelést. A GUI kivételével:

Számos komoly probléma van a GUI teljesítményével
- Memória. Minden Java-alkalmazás saját virtuális gépet futtat,
a könyvtárak egyáltalán nem oszlanak meg (részben a probléma megoldódott 5.0-ban).
- Cross-platform. Ehhez meg kell fizetnie, és 1.4 előtt a díj nagyon
nagyszerű. Minden új verzióban a munka sebessége nő.
- Hulladékgyűjtő. Valójában, különösen a memória problémájával, mikor
lemez memóriát használ.

A grafikus felhasználói felületen nehéz beszélni a teljesítmény összehasonlításairól. Ha hozzáadsz
a memória nagyobb, a különbség kicsi. De ha kevés memória van (vagy
Számos alkalmazás indult el) - a különbség rendkívül jelentős.
Továbbra is hozzá kell adni a teljesítményjavítást (egy virtuális
gép minden Java alkalmazáshoz, könyvtárak megosztása, csökkentése
a platformon keresztüli költségek, a szemétgyűjtés javítása)
a SANTECHNICS egyik fő feladata.

A Java régóta a kiszolgálóalkalmazások szabványává vált, növekszik
teljesítményét a C ++ szintig. Java asztali számítógépekhez
még mindig erősen a C ++ mögött.
Bár már elviselhetsz (különösen a cross-platformra)
és a jövőben reménykedik, hogy enni.

Várja meg a gépemen, hogy futtassa a C ++ Buildert JBuildert. (mindkettőt a Borland-ból, egy C-ben írt, a második Java-ban, amennyire én tudom). és miért érdekes.A SeaBuilder 40 MB memóriát vett magának, és még primitívabb DjBilder 120-at is. )

Mindig azon a véleményen, hogy kell írni Java (Java ha a szünet kapcsoló) helyett a „java”, hiszen a sziget neve van fenntartva és teák

Kapcsolódó cikkek