|
|
|
|
Strumenti |
28-12-2007, 16:10 | #1 |
Registered User
Iscritto dal: Aug 2006
Messaggi: 305
|
JAVA più lento del C++. Ma quanto?
Sul web i pareri sono discordi e contrastanti, sebbene tutti ammettano che C++ sia più performante di java. Alcuni però sostengono che le prestazioni siano simili. Voi che ne dite?
Parlando ad esempio di software di visione artificiale, credete sia conveniente l'utilizzo di java (comodo per via delle libererie disponibili) o è meglio utilizzare il C++? |
28-12-2007, 16:13 | #2 |
Senior Member
Iscritto dal: Dec 2002
Città: Milano
Messaggi: 5060
|
La filosofia di Java è chi va piano va sano e va lontano.
Tutto in Java è fatto per essere il più lento e pesante possibile . Se hai mezzi/conoscenze per usare il C++ vai sicuro su quello... |
28-12-2007, 16:16 | #3 |
Registered User
Iscritto dal: Aug 2006
Messaggi: 305
|
La mia filosofia è che se i mezzi o le conoscenze mancano, si è sempre in tempo ad acquisirle
|
28-12-2007, 16:38 | #4 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12068
|
Quote:
guarda che è già da un paio di anni che è stato introdotto il JIT. Java ha prestazioni paragonabili al C++ oggi come oggi. Già un paio di volte avevo postato dei bench con sciencemark e con non ricordo quale altro software in cui si vedeva che mediamente, in quell'ambito, le prestazioni di java erano circa il 95% di quelle del C++.
__________________
|
|
28-12-2007, 16:47 | #5 | |
Senior Member
Iscritto dal: Dec 2002
Città: Milano
Messaggi: 5060
|
Quote:
Già il fatto di usare una VM è di per sè più pesante... |
|
28-12-2007, 16:55 | #6 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12068
|
Quote:
cioè tu misuri le performance in base al tempo di avvio di un'applicazione o in base alla memoria occupata dalla VM? guarda.. io le performance, nel mio ambito, tendo a valutarle in base alla velocità di servizio a regime e, sinceramente, in un'epoca in cui 2 GB di ram costano 50 euro, che la VM in partenza mi occupi 20 MB sinceramente non mi pare uno scandalo. L'importante è che le prestazioni siano paragonabili al C++ SENZA gli sbattimenti assurdi di quel linguaggio.
__________________
|
|
28-12-2007, 17:07 | #7 | |
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
Quote:
i benefici di java sono ben altri, non ti pare? |
|
28-12-2007, 17:10 | #8 | |
Member
Iscritto dal: Apr 2007
Messaggi: 263
|
Quote:
I linguaggi diventano sempre piú lenti e pesanti, mentre i computer diventano sempre piú potenti... Secondo me non ha senso creare linguaggi cosí pesanti e non sfruttare al massimo le capacitá della macchina. P.S. Sto parlando in particolare dei linguaggi .NET, con java non ho tanta esperienza, ma credo sia la stessa cosa Ultima modifica di stdecden : 28-12-2007 alle 17:15. |
|
28-12-2007, 17:34 | #9 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12068
|
__________________
|
28-12-2007, 17:36 | #10 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12068
|
Quote:
veramente + un programma è ad alto livello + è facile concentrarsi sul problema, magari avendo a disposizione + tempo per trovare algoritmi migliori per risolverlo. Se invece ci si dovesse concentrare a tracciare un maledetto segmentation fault o qualche memory leak apparentemente impossibile si otterrebbero programmi di qualità + scadente (o per le features che non sono state implementate per carenza di tempo o per i bug ancora presenti)
__________________
|
|
28-12-2007, 18:12 | #11 |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Ciao,
volevo aggiungere il mio parere: la vita non e' riconducibile ad un benchmark Il tuo programma sara' piuttosto lungo, con una parte piuttosto critica e (molte) altre parti meno critiche, ma comunque necessitanti di un certo grado di prestazioni. Probabilmente in queste parti (circa l'80% del codice) troverai la conferma di quello che sto per dirti (sperando di non far partire un flame gigantesco): Java avra' prestazioni addirittura superiori al C/C++! Ho avuto la possibilita' di vedere la stessa applicazione codificata nei due linguaggi e verificare, (non senza incredulita') questa affermazione. Com'e' possibile? Semplice: nei benchmark pui codificare lo stesso algoritmo di test in entrambi i linguaggi, con una codifica che e' pressoche simile. In questo caso, spesso (non sempre e non cosi' frequentemente come si crede), C++ ha prestazioni superiori (i.e. e' piu' veloce, stiamo parlando di questo, no?). Nella programmazione di una applicazione "vera", spesso lo stesso algoritmo deve essere codificato nei due linguaggi in due maniere diverse. Il risultato e' che spesso, per evitare crash/leaks/... in C++ e' necessario ricorrere alle COPIE di oggetti, mentre in Java queste copie semplicemente non sono necessarie. La copia costa, in termini di memoria e di velocita' di esecuzione, e costa piu' della compilazione JIT (che avviene peraltro una sola volta). Addirittura (esperienza personale) i programmatori non si accorgono nemmeno di aver fatto una copia poiche' essa e' implicita nel passaggio di argomenti, ritorno di funzioni, .... Questo fa decadere le prestazioni drammaticamente. Queste copie sono evitabili? Non sempre, e non sempre in modo "pulito". Java non ha questi problemi. Ovviamente dovra' deallocare la memoria non piu' in uso, ma puo' usare trucchi basati su "economia di scala", per esempio, deallocando blocchi di oggetti contigui od usando un qualsiasi altro algoritmo. E' questo un notevole vantaggio di cui C++ non puo' godere. Esistono poi parecchi altri problemi relativi alle prestazioni, in un programma reale. Java li affronta mediamente meglio, e fa sicuramente meglio di un programmatore medio C++. Il mio suggerimento e': scrivi tutto in Java. Ci saranno poi delle parti (saranno meno del 10%) che potranno essere ottimizzate cambiando linguaggio. Potrai riscrivere queste parti in C++ (meglio in C) e chiamarle direttamente dall'ambiente Java, cercando cosi' di ottimizzare i benefici.
__________________
In God we trust; all others bring data |
28-12-2007, 19:45 | #12 | |
Member
Iscritto dal: Jul 2005
Messaggi: 280
|
Quote:
Per utilizzi un po a metà tra il normale e lo strict real time farei la parte critica in C/C++ e lo chiamerei da java tramite JNI (spero di aver azzeccato la sigla). |
|
28-12-2007, 20:23 | #13 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7026
|
|
28-12-2007, 20:26 | #14 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7026
|
Quote:
|
|
28-12-2007, 20:29 | #15 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7026
|
anche perché come dimensioni del... "codice oggetto" vince sicuramente Java; in genere gli eseguibili nativi sono molto più grossi dei .class o dei .jar (questi ultimi poi sono pure compressi).
|
28-12-2007, 20:30 | #16 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12068
|
Quote:
l'ottimizzazione del codice se effettuata senza alcun dato preciso di profiling, e, in caso non sia strettamente necessaria, porta sempre ad un peggioramento del codice rendendolo meno leggibile e + soggetto ai bug. Io di solito scrivo in Java (o python o ruby o C# o quello che capita) e finora non ho mai avuto necessita di ottimizzare i miei programmi dato che la velocità di esecuzione è generalmente ottimale. In caso fosse strettamente necessaria, la prima fase di ottimizzazione da fare SEMPRE, è quella di utilizzare un algoritmo + performante. Con un semplice cambio di algoritmo si possono averee vantaggi MOLTO + drastici rispetto all'uso dello stesso algoritmo con JNI. In caso ancora non fosse sufficiente cercherei di ottimizzare il tutto nello stesso linguaggio utilizzato, e, solo come soluzione estrema, ottimizzerei l'1% critico di codice con un linguaggio compilato staticamente.
__________________
|
|
28-12-2007, 20:31 | #17 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7026
|
|
28-12-2007, 20:37 | #18 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7026
|
Quote:
|
|
28-12-2007, 20:46 | #19 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7026
|
Quote:
e secondo te un 1% di performance in più non lo puoi guadagnare migliorando l'hardware? perché cavolo deve essere il programmatore a farsi un didietro così a scrivere software? tantopiù che siamo a Natale |
|
28-12-2007, 21:06 | #20 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12068
|
Quote:
__________________
|
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:06.