Newsgroup: it.comp.java
Titolo: test di confronto tra C++ e Java

siccome non sapevo che fare ho fatto alcuni test di confronto tra C++ e
Java, i risultati
sono sorprendenti!
il post è un po' lunghetto...
Confronto tra C++ e Java: 3 test  (cicli for di 5.000.000 iterazioni)
_____________________________ Java __________________________________
Esecuzione di 5000000 radici quadrate             f = Math.sqrt(d+f);
Elapsed: 110 ms
Esecuzione di 5000005 mult & div                     f = (3.123456 * f ) /
(Math.log(i));
if (f < 0.0000001) f = 1;
Elapsed: 984 ms
Esecuzione di 5000000 test_vs_java                     va +=
(((va*0.3*i)/(i*2))%17);
Elapsed: 188 ms
_____________________________ C++ ___________________________________
Esecuzione di 5000000 radici quadrate                 f = sqrt(d+f);
Elapsed: 187 ms
Esecuzione di 5000005 mult & div                         f = (3.123456 * f )
/ (log(i));
if (f < 0.0000001) f = 1;
Elapsed: 500 ms
Esecuzione di 5000000 test_vs_java                     va += ( (int)
((va*0.3*i)/(i*2) ) % 17 );
Elapsed: 297 ms
_____________________________________________________________________
Nel primo e nel terzo test Java è addirittura più veloce!!!
E' invece più lento nel secondo test (però c'è quel log che potrebbe essere
+ efficiente in C++...)
Infine un'ultimo test. Costruisco una matrice a 3 dimensioni di 256 per lato
e
la "popolo"...
In C++ viene creata come int*** con calloc ma poi è scorsa come un normale
array tramite
le [ ]
In Java l'ho fatto nel modo più "naturale", cioè quello che mi veniva in
mente subito
int[][][] = new int[256][256][256];    (e ho messo -Xmx256M come parametro
alla VM)
Sorpresa !!!
Esecuzione di cubo in Java    Elapsed: 141 ms
Esecuzione di cubo in C++    Elapsed: 141 ms
stessi tempi!!!
_________ codice C++ ____________
 int*** histogram;
 int i,j,z;
 histogram =(int***) calloc (256,sizeof(int**));
  for (i = 0; i<256; i++) {
   histogram[i]=(int**) calloc (256,sizeof(int*));
   for(j = 0; j<256; j++){
    histogram[i][j]=(int*) calloc(256,sizeof(int));
   }
  }
 clock_t start,finish;
 double result;
 printf("\n Test cubo di 256x256x256 \n", result);
 start = clock();
 for (i = 0; i<256; i++)
  for (j = 0; j<256; j++)
   for (z = 0; z<256; z++) {
    histogram[i][j][z] = i+j+z;
   }
 finish = clock();
 result = finish-start;
 printf(" Tempo trascorso in ms: %2.9f\n\n ", result);
____________ codice Java _____________
int [][][]histogram = new int[256][256][256];
    System.out.println("Esecuzione di cubo");
    long t = System.currentTimeMillis();
    for (int i = 0; i < 256; i++) {
      for (int j = 0; j < 256; j++) {
        for (int z = 0; z < 256; z++) {
          histogram[i][j][z] = i+j+z;
        }
      }
    }
    long end = System.currentTimeMillis();
    System.out.println("Elapsed: " + (end - t) + " ms");

Ti suggerirei a questo punto di fare un altro test (che forse ti 
deluderà...sigh...)
Creazione di N oggetti Stringa
Creazione di N oggetti di complessità media (tipo con molte property 
primitive e non)
Creazione di N oggetti di complessità alta (con all'interno oggetti di 
complessità media)
In Java potresti avere delle brutte sorprese per quello che riguarda:
- occupazione di memoria
- performance
In C++, di contro, avrai sorprese di altro tipo:
- memory leaks (a seconda di quanto sei "tagliato")
- errori di memoria (idem)
Siamo tutti molto curiosi di sapere come è andata ! (hai detto tu che 
non hai altro da fare...eh eh..)
-- 
                 ''~``
                ( o o )
+---------.oooO--(_)--Oooo.----+
 
http://www.jroller.com/page/megadix/
 
http://www.mict.it/