Bill și Paul excelente UCSD Benchmarks pentru Java (versiunea 1.1)

Sursă Originală: http://cseweb.ucsd.edu/~wgg/JavaProf/javaprof.html

Notă: Tocmai am actualizat reperele noastre la versiunea 1.1, care corectează o problemă cu sincronizarea firelor. Codul este încă compatibil cu 1.0. Sunt numite două metode depreciate. Consultați sursa de referință pentru detalii.

Acum există o mulțime de compilatori și interpreți Java și avem nevoie de o modalitate de a spune care compilatoare generează un cod mai bun și ce interpreți le execută mai repede. Pentru a satisface această nevoie, am produs un set mic de repere simple, scrise în Java. Acestea au fost inspirate de cărțile lui Jon Bentley ” Programarea perlelor și scrierea programelor eficiente” .

Utilizarea acestor criterii de referință

Există trei moduri în care puteți utiliza această pagină pentru a efectua analize de performanță Java, pentru a rula reperele ca un applet (dacă browserul dvs. acceptă java), pentru a descărca etichetele de referință sau pentru a vedea unele rezultate pe care le-am adunat:

Benchmark-uri conexe

Cercetări și detalii

  • Aceste valori de referință sunt simpliste și nu acoperă toate problemele de performanță interesante. În special, testul cu buclă folosește o buclă goală, iar metodele și firele sunt triviale. Un optimizator foarte bun ar putea detecta că rezultatele calculelor nu sunt utilizate etc. și apoi nu efectuați deloc calculul!
  • Multe dintre aceste valori de referință efectuează în mod repetat o activitate și apoi raportează timpul total. Acest timp include în mod inevitabil timpul de buclă necesar pentru repetarea activității. Puteți utiliza timpul returnat de la bara de referință pentru a determina acest efect.
  • Au fost efectuate două tipuri de măsurători GC. Primul cere ca runtime-ul să efectueze un GC complet. Atât timpul cât și spațiul recuperat (și probabil adăugat) sunt raportate. Al doilea “ aleatoriu ” alocă câteva mii de obiecte într-o matrice mică (timpul pentru looping și accesul la matrice reprezintă, probabil, o mică parte din timpul total), cauzând cele mai multe disponibile pentru recuperare de către colectorul de gunoi. Deoarece, de exemplu, timpul de rulare Java al Sun are un colector incremental, multe dintre acestea pot fi colectate fără să apară un GC complet.
  • Rezultatele obținute vor depinde de toate aspectele sistemului, inclusiv de încărcarea sistemului în momentul în care executați reperele. Acest factor poate complica comparațiile.
  • Pentru portabilitate maximă, temporizările sunt realizate cu System.currentTimeMillis (). Această funcție înregistrează timpul de perete, astfel încât toate activitățile computerului sunt incluse în acest moment. Rezultatele dvs. vor fi cele mai exacte dacă executați într-un sistem descărcat. Dacă rulați pe un sistem UNIX, utilizarea timpuluisau a timpului de funcționare vă va da o idee despre cât de mult timp obțineți procesul.
  • Am obținut rezultate non-intuitive în unele cazuri, sugerând că sistemul de rulare Java face ocazional ceva (cum ar fi colectarea de gunoi sau trecerea firelor) fără ca standardul să o solicite. Reperul de colectare a gunoiului pare să aibă un comportament foarte diferit, în funcție de mediul înconjurător, incluzând prăbușirea (appletviewer-ul lui Sun) și agitația / agățarea (Netscape).

Autoritate și contacte

Aceste valori de referință au fost elaborate de Bill Griswold și Paul Phillips. Dacă aveți întrebări sau comentarii, vă rugăm să ne contactați!