Unul dintre principalele dezavantaje ale limbajului Java este în mod tradițional considerat a fi o viteză redusă a programelor în comparație cu aplicațiile din limba C ++. Și pentru aplicațiile în care portabilitatea între platforme sau complexitatea dezvoltării nu este critică, viteza a fost adesea motivul pentru care dezvoltatorii au ales C ++.
Comparând performanța Java vs. C ++
Programele C ++, compilate cu G ++ (GCC) 3.3.1, și programele Java compilate cu Sun Java 1.4.2_01 au fost comparate. Pentru a rula programe Java, am folosit versiunea 1.4.2_01 a mașinii virtuale Sun. Măsurătorile Velista pe laptop cu un procesor Pentium 4 și 512 MB de memorie, care ruleaza pe Red Hat Linux 9 / Fedora Testul 1 cu versiunea de nucleu 2.4.20-20.9 pe.
În timpul testării, sa dovedit că cheia pentru performanța programelor Java este configurația mașinii virtuale. După cum se poate observa din graficul, utilizând opțiunea setări „client“ (acesta este instalat în mod implicit), aproape toate operațiunile în programele Java ruleze mai lent decât programe în C ++, deși nu la fel de mult ca s-ar asuma. Dar când porniți setările "server", în care nu există restricții atât de stricte cu privire la cantitatea de memorie utilizată, avantajul în majoritatea testelor a fost pe partea Java. Și o serie de operații, de exemplu, invocarea metodelor și hashing-ul, sunt efectuate în programe Java de câteva ori mai mult decât în programele C ++. Cu toate acestea, în cea mai mare parte a testelor, vitezele Java și C ++ s-au dovedit a fi comparabile, ceea ce, desigur, poate servi drept argument împotriva părerii despre funcționarea lentă a Java.
Rezultate și date
Nonsens complet nu a văzut atunci când programul rapid pe Java, atât server și client.
2Znatokam. Oracle10g este scris pe cel puțin cel puțin, dar într-o neclare deja în coada de așteptare este integrat Java mașină și sa dovedit că ceva de genul Oracle Aplication Server.
Eu lucrez eu în testare timp de 3 ani, și din ea pentru mine, am ceva să compare, testa performanța aplicațiilor Java începe chiar zayavlyayust ca doar atât de repede suta in regimentul este :)
divorț pentru frați.
1. compilați static c / c ++ și obțineți apelul metodei serverului java în dump-ul de mare viteză
2. Testați cu limite constante ale matricei? Mă îngrijesc împreună cu voi! a face malloc / new fără dimensiuni constante și a navigat. dar verificând limitele matricei.
tipule, crezi că te-ai îmbărbătat sau că lucrezi la Soare?
Da, tu ești, băieți, mașină Java
împreună cu faimosul său colector
gunoi este scris pe ce. cel puțin
pe C, eventual chiar folosind clase, și asta este deja
cu ++ (cu privire la ce să mai fie încă scris, nu cu siguranță)
Și cum C poate funcționa mai repede decât el însuși.
În plus, dacă compilația este utilizată în zbor,
timpul acestei compilații este motivul pentru care nimeni nu ia în considerare,
comparând executarea programelor scrise în C ++ și Java.
C ++ oferă toate posibilitățile de optimizare, deoarece acolo
totul este simplu și simplu: indicele de direcții, indicatorul syyy,
dacă nu abuzați de mai multe moșteniri - toate
rapid și ușor!
În zhave, totul depinde de
implementarea unei mașini (cutie neagră),
și anume în creierul unui anumit
programator care la scris. Vă puteți gândi,
ce optimizați și, în ultima vreme, nu, nu!
Mașina va face totul în felul său!
Apoi, rulați o aplicație desktop completă
pe o maxilară pe o mașină de scris medie (P 1000, 256 mb)
-- Ei bine, încetinesc. Nu există teste pentru a produce
este necesar! Mai ales GUI!
Și luați PDA - AWT frânează fără temei, și despre
SWING și spuneți nu!
Cu un rânjet citesc acest articol.
Cred că există unele erori în teste, de exemplu, ele măsoară timpul de execuție al programelor și nu timpul pentru efectuarea acelorași operații. Când prima lansare ar trebui să înceapă Java mașină virtuală, atunci decizia trebuie să fie făcută dacă să facă o compilare cu codul nativ, dacă da, există o compilare, și numai după toate acestea începe să execute algoritmul.
De exemplu, în calculul numărului Fibonacci, trebuie să comparăm algoritmii de calcul și orice altceva nu trebuie luat în considerare.
Iată versiunile mele de programe:
#include
#include
#include
folosind namespace std;
nesemnată fibră lungă (nesemnată lungă n) dacă (n <2) return(1);
altfel returnează fib (n - 2) + fib (n - 1);
>
int principiu (int argc, char * argv []) int n = ((argc> = 2) .atoi (argv [1]) 1);
struct timeval bt, et;
primetime (bt, NULL);
nesemnată lungă f = fib (n);
primetimeday (et, NULL);
cout <
<<(float)(et.tv_sec-bt.tv_sec+(et.tv_usec-bt.tv_usec)*1e-6)
<
>
import java.util.Date;
public clasa fibo public static void principal (String args []) int n = Integer.parseInt (args [0]);
Data bt = data nouă ();
int f = fib (n);
Data et = new Data ();
System.out.println (f);
lungul dt = et.getTime () - bt.getTime ();
System.out.println ("Ora:" + String.valueOf (dt * 1e-3));
>
static int int (int n) dacă (n <2) return 1;
înapoi fib (n - 2) + fib (n - 1);
>
>
Rezultatul sa dovedit a fi destul de neașteptat:
Duron 750 MHz, 256 MB RAM
OS: Open SuSe Linux 10
JVM 1.5
1. Când citești articole traduse, trebuie să te uiți în mod necesar la sursă.
Pentru că ei traduc din noi. hmm. Traducătorii o numesc
"Specificitatea traducerii știrilor." În acest caz, titlul nu este tradus
complet, care provoacă o furtună de emoții. Titlul original spune
_only_ despre un test de performanță - Benchmark imparțial.
2. Așa cum a spus aveugle, trebuie să te uiți la testele care le-au fost folosite pentru a le compara.
Într-adevăr, apelul funcției în Java este mult mai rapid decât în C ++. în același mod
cum ar fi crearea unui obiect
3. Pentru cei care consideră că Java este un "Interp_it_tator". E ca și cum ai spune
că C ++ compilatoare nu există, deoarece C ++ este mai întâi tradus în C și
numai atunci codul C este compilat (și acesta a fost o dată).
Nici o interpretare Java sau C # nu este utilizată, se utilizează compilatorul JIT (program
este compilat în zbor din codul byte).
Nu este nimic de vina pentru articolul original, testele au fost efectuate cu cea mai mare onestitate.
Apropo, puteți să vă orientați spre această evaluare. Cu excepția interfeței grafice:
Există câteva probleme grave legate de performanța interfeței grafice
- Memorie. Fiecare aplicație Java rulează o mașină virtuală proprie,
bibliotecile nu sunt partajate deloc (în parte, problema este rezolvată în 5.0).
- Cross-platform. Pentru aceasta trebuie să plătiți, iar înainte de 1,4 taxa a fost foarte mare
este minunat. Cu fiecare versiune nouă, viteza de lucru crește.
- Colector de gunoi. De fapt, mai ales cu problema memoriei, când
se folosește memoria de disc.
Cu GUI, este greu să vorbim despre comparații de performanță. Dacă adăugați
memoria este mai mare, diferența este mică. Dar dacă există puțină memorie (sau
Au fost lansate multe aplicații) - diferența este extrem de semnificativă.
Rămâne să adăugăm că îmbunătățirile de performanță (una virtuală
mașină pentru toate aplicațiile Java, partajarea bibliotecilor, reducerea
costuri datorate platformei inter-platforme, colectare îmbunătățită a gunoiului)
una dintre sarcinile principale ale SANTECHNICS în acest moment.
Java a devenit mult timp un standard pentru aplicațiile server, crescând
performanțele sale la nivelul de C ++. Pentru desktopurile Java
încă puternic în spatele C ++.
Deși puteți deja să tolerați (în special pentru cross-platform)
și în viitor speră să mănânce pe asta.
Așteptați mașina pe care rulează C ++ Builder JBuilder. (ambele de la Borland, unul scris în C, cel de-al doilea în Java, în măsura în care știu.) Exemple uluitoare. și de ce este interesant. SeaBuilder a luat 40 MB de memorie în sine, și mai primitiv DjBilder 120. în plus, este teribil în același timp. )
Totuși, eu sunt de părere că este necesar să scrieți Java (java dacă rupe comutatorul) și nu "java", deoarece acest nume este rezervat de insulă și tipul de ceai