Poate fi java mai rapid c

Dar, uneori, deja treaz când mă gândesc la o astfel de comparație, pentru toată dorința mea de a înțelege de ce Java ar putea să nu fie atât de repede, în principiu, dar cel puțin nu mai lent decât C ++, nu am argumente, chiar și pentru el însuși.







În primul rând, câteva "date":

Să presupunem că A este viteza liniară a mașinii când. B - viteza de compilare a octetului JVM în codul mașinii. Apoi, viteza totală de execuție a codului:

Evident, B1 = 0. Deoarece C ++ generează direct codul mașinii și nu necesită o muncă suplimentară în procesele de execuție. Dar B2 este 100% non-zero, pentru că indiferent cât de eficient este compilatorul JIT, acesta necesită întotdeauna un timp pentru compilare. Mai mult, JIT nu compilează toate dintr-o dată, ci "compilează" pe calea de execuție. Se pare, există întotdeauna o probabilitate de zero, care au brusc pentru a rula codul care nu au fost solicitate anterior, si va lua timp pentru realizarea sa. Chiar dacă presupunem că compilatorul JIT folosește metode sofisticate de predicție a căilor de execuție și face totul pentru a reduce B2. dar B2, prin definiție, nu este 0. Dacă a fost 0, atunci nu ar exista JVM, dar ar exista codul mașinii pure.







Apoi, ia în considerare A1 și A2. Acești parametri determină cât de bine compilatorul generează codul (sau bytecode). În opinia mea personală, subiectivă și părtinitoare, C ++ (nu C), o șansă mai bună de optimizare, datorită template-uri (compilatorul are o informație semantică complet pentru inline'a) și pentru a genera cod mașină pentru o anumită platformă (compilator știe exact care instrucțiuni mașină ar fi cel mai eficient în fiecare caz). Din păcate, eu nu sunt foarte bun la Java generic'ah, și ghidat numai de zvonuri că în Java acestea sunt „ireal“, scrisă mult mai târziu și inferior la șabloane C ++. Și întrucât compilatorul este obligat să emită un cod JVM portabil standard, nu există nicio modalitate de optimizare pentru o anumită platformă. Există speranța că acest lucru va face JIT, dar nu va mai exista nici o informație semantică pentru o optimizare mai profundă. Iar JIT ar trebui să fie rapid, căci va exista un compromis între calitatea optimizării și viteza compilării. În C ++, nu există o astfel de problemă, deoarece puteți compila cât doriți.

Deci, acestea sunt motivele mele pentru mine, măsurate în papagalii virtuali. Nu mă pot convinge că Java poate fi mai rapid sau cel puțin la un nivel cu viteza C ++. Voi fi fericit pentru ajutorul acordat în înțelegerea acestei probleme.

Stas și cu mine am făcut niște comparații simple, în special cu privire la implementarea QuickSort, iar Java a jucat aproximativ 10% prin viteza liniară a codului.

Este clar că 10% nu fac întotdeauna vremea. Uneori, instrumente de dezvoltare importante de introspecție, mediu de dezvoltare, execuție controlată de cod în înlocuirea zbura și mult mai mult, ceea ce face ca platforma Java, și nu „Thrasher“ C ++. Dar de ce să vorbim despre viteză atunci?







Articole similare

Trimiteți-le prietenilor: