PDA

Visualizza la versione completa : [C vs Java] Prestazioni


/dev/null
26-07-2004, 21:05
Oggi per fare delle prove ho realizzato un programma semplicissimo in C e Java
Ecco il codice:
C
#include <stdio.h>
#include <time.h>

int main ( ) {
int i;
time_t now = time ( NULL );
printf ( ctime ( &now ) );
for ( i = 0; i < 1000000000; i ++ ) {
// if ( ! ( i % 100000000 ) )
// printf ( "%d\n", i )
}
printf ( "Finito!\n\n" );
now = time ( NULL );
printf ( ctime ( &now ) );
return 0;
}

Java
import java.io.*;
import java.util.*;

class javacnt {
public static void main (String[] args) {
Date d = new Date ( );
System.out.println ( d );
for (int i=0; i<1000000000; i++) {
//if ( ( i % 100000000 ) == 0 )
// System.out.println ( i );
}
System.out.println ("Fine");
d = new Date ( );
System.out.println ( d );
}
}



Eseguendoli entrambi mi sono accorto che quello in Java e' leggermente piu' veloce...
Se invece decommento le due linee commentate vince di netto il C...

Perche' nel primo caso vince (anche se di pochissimo) il Java?




PS: I programmi ci hanno messo 11 secondi quello in C e 9 quelli in Java, Ci mettono cosi' tanto perche' nel frattempo (da oggi pomeriggio) sto ricompilando tutto il mio sistema operativo, il processore e' quindi usato al 100% dal compilatore e i due programmi che ho testato ora sono quindi molto rallentati... Faro' delle prove anche quando la ricompilazione sara' terminata...

alka
27-07-2004, 03:11
Originariamente inviato da /dev/null
Ci mettono cosi' tanto perche' nel frattempo (da oggi pomeriggio) sto ricompilando tutto il mio sistema operativo, il processore e' quindi usato al 100% dal compilatore e i due programmi che ho testato ora sono quindi molto rallentati...
Forse una prova che sia davvero tangibile andrebbe fatta esclusivamente senza altri programmi in esecuzione, nel limite del possibile.

Comunque, pubblica i risultati, soprattutto se curiosi. :)

/dev/null
27-07-2004, 03:57
Originariamente inviato da alka
Forse una prova che sia davvero tangibile andrebbe fatta esclusivamente senza altri programmi in esecuzione, nel limite del possibile.

Comunque, pubblica i risultati, soprattutto se curiosi. :) Ora ha finito di compilare :unz:
Quello in Java ci mette ~3 secondi, quello in C ~4...
In C ho dichiarato la variabile i register e ci mette 3 secondi anche lui...

Probabilmente credo che ci impieghino uguale tempo perche' il javac rndee in automatico la variabile register... E il ciclo dovra' leggerlo solo una volta invece che molte...
Se infatti aggiungo un if dentro il ciclo il C stravince... Batte il Java di ~4 volte...



Comunque, pubblica i risultati, soprattutto se curiosi. :) Fatto, ma ho messo il codice proprio perche' anche voi proviate


:prrr: :D :ciauz:

alka
27-07-2004, 09:40
Originariamente inviato da /dev/null
Fatto, ma ho messo il codice proprio perche' anche voi proviate
L'avevo immaginato ed hai ragione, solo che non ho voglia di installare un compilatore C sulla mia macchina. :zizi:

anx721
27-07-2004, 12:59
Ho provato anche sul mio pc, ma eseguendo il cilco for 10 volte per allungare il tempo; sia per java che per c ho rieseguito il test per 3 volte:


JAVA: 25 secs;

C: 31 secs;


Grande JAVA !!! :unz:

:ciauz:

Ikitt
27-07-2004, 17:54
Originariamente inviato da /dev/null
Perche' nel primo caso vince (anche se di pochissimo) il Java?

spannometricamente, perche` piu` ul linguaggio e` di alto livello, piu` e` grande l'overhead per l'I/O (non sempre vero, ma dovrebbe valere in questo caso).

Comunque, considerando la presenza di compilatori JIT, ottimizzatori a runtime etc. etc., un'eventuale parita` o persino superiorita` di java sul C, in quanto a pura velocita` di esecuzione non sarebbe soprprendente IMHO.
Discorso a parte per l'occupazione di memoria, per quello c'e` poco da fare

PS:
il tutto IMHO/AFAIK, ovviamente.

/dev/null
27-07-2004, 20:57
Originariamente inviato da Ikitt
spannometricamente, perche` piu` ul linguaggio e` di alto livello, piu` e` grande l'overhead per l'I/O (non sempre vero, ma dovrebbe valere in questo caso).Cioe' :master:


Comunque, considerando la presenza di compilatori JIT, ottimizzatori a runtime etc. etc., un'eventuale parita` o persino superiorita` di java sul C, in quanto a pura velocita` di esecuzione non sarebbe soprprendente IMHO.
Discorso a parte per l'occupazione di memoria, per quello c'e` poco da fareNon mi riesce comprendere...
Il codice C compilato viene trasformato in linguaggio macchina...
Quello Java invece viene eseguito da un interprete, i cui comandi vengono eseguiti dalla macchina...
L'interprete pero' suppongo sia scritto in C/C++ quindi dovrebbe dare le stesse o minori prestazioni di un altro programma scritto in C che fa la stessa cosa dello script che viene interpetato.... Anche perche' la JVM dovra' essere piena di if/switch che di sicuro non velocizzano...
Probabilmente la JVM e' stata ottimizzata con l'assembler, questo puo' dare qualche vantaggio, ma cos tanto? Bh in effetti soltanto definendo i come register nel programma in C guadagno un sacco... :fagiano:


PS:
il tutto IMHO/AFAIK, ovviamente. Non so cosa significhi, ma :unz:






Originariamente inviato da anx721
Ho provato anche sul mio pc, ma eseguendo il cilco for 10 volte per allungare il tempo; sia per java che per c ho rieseguito il test per 3 volte:


JAVA: 25 secs;

C: 31 secs;


Grande JAVA !!! :unz:

:ciauz: :prrr:
Nel programma in C prova a definire la variabile i cosi':
register int i;
E poi prova ad aggiungere qualcosa all'interno del ciclo del programma in entrambi i linguaggi... Ad esempio
if ( i < 0 ) break;E vedrai che il C non ha niente da invidiare al Java (se non la portabilita' :stordita: ) :unz:

:ciauz:

unomichisiada
27-07-2004, 23:44
il tutto IMHO/AFAIK, ovviamente.


Scusate la piccola deviazione ma anche a me interesserebbe sapere il significato di quanto sopra.Mi gi capitato di scontrarmi con la prima parola e quella volta ho pensato ad un'errore di battitura ma ora mi sembra alquanto improbabile.Grazie del chiarimento in anticipo,ciao.

anx721
28-07-2004, 00:03
Originariamente inviato da unomichisiada




Scusate la piccola deviazione ma anche a me interesserebbe sapere il significato di quanto sopra.Mi gi capitato di scontrarmi con la prima parola e quella volta ho pensato ad un'errore di battitura ma ora mi sembra alquanto improbabile.Grazie del chiarimento in anticipo,ciao.


IMHO = In My Humble Opinion = Secondo la mia umile opinione

AFAIK = As Far As I Know = Per quanto ne so


:ciauz:

/dev/null
28-07-2004, 00:05
Originariamente inviato da unomichisiada




Scusate la piccola deviazione ma anche a me interesserebbe sapere il significato di quanto sopra.Mi gi capitato di scontrarmi con la prima parola e quella volta ho pensato ad un'errore di battitura ma ora mi sembra alquanto improbabile.Grazie del chiarimento in anticipo,ciao.
Lo usa tanta gente su questo forum :zizi:
Pensavo che IMHO fosse l'urlo di Abatantuono in "Attila Flagello Di Dio"... :maLOL:

Loading