Newsgroup: it.comp.java
Titolo: Applicazioni "pesanti" in Java

L'altro giorno stavo discutendo con il mio capo sulla scelta del linguaggio 
di sviluppo della prossima applicazione.
Dopo un po' di chiacchere mi ha chiesto se conoscessi delle applicazioni 
pesanti in termini di calcolo scritte in Java, e francamente non ho saputo 
che esempi portere...voi conoscete qualcosa?


Se posso dire la mia credo che sia difficile trovare queste
applicazioni pesanti in termini di calcolo (io ho inteso con ciò che
volesse riferirti ad applicazioni specializzate nell'utilizzo delle
operazioni in virgola mobile et similia matematiche) poichè
generalmente i professionisti tendono a programmare ciò in C++ che è
un linguaggio di programmazione più adatto del Java a questo scopo.. e
poi generalmente sono applicazioni (sempre quelle che fanno largo uso
del calcolo in virgola mobile) che nascono, si sviluppano e si
mantengono all'interno delle cerchie accademico-scientifiche, ovverso
stiamo parlando di personale universitario abituato a programmare in C+
+ e non in Java.
Questa è l'idea che ho a riguardo,
poi sarei molto contento se venissi smentito
:)



Conosco questo di piuttosto "pesante":
http://www.unidata.ucar.edu/software/idv/
-- 
SHIRAKAWA Akira

:)
Dubito che sarai smentito, se non nel fatto che, forse,
quando la velocità di esecuzione è fondamentale persino il C++
può essere inadeguato ed occorra ricorrere direttamente al C.
Scorpio.


Ci sono un sacco di applicazioni utilizzate ad esempio nelle
telecomunicazioni
che oggi sono in Java e ne conosco diverse nell'automotive utilizzate
da
aziende di primo piano.
Sono applicazioni custom scritte da loro o da loro fornitori, che
ahime' non hanno molta visibilità fuori da tali aziende.....ma sono
scritte in Java.
La lentezza del Java era relativa alle prime versioni ma oggi sembra
piu' un pregiudizio o una leggenda metropolitana!
Ciao
Angelo

 piu' un pregiudizio o una leggenda metropolitana!
credo che per l'op sia più un problema di confusione.
occorre vedere qual'è l'ambito in cui si colloca il programma e perché si 
richiede performance di calcolo. è chiaro che java non ha funzioni 
avanzate di calcolo numerico/scientifico, ma va capito in prima istanza 
se serve questo. oppure se per "applicazioni pesanti in termini di 
calcolo" si intende semplicemente applicazioni che fanno tante operazioni 
aritmetiche, magari intervallate da operazioni di i/o o database che 
sprecano da sole tutto il tempo risparmiato nelle ottimizzazioni.

toto ha scritto:

Potrebbe interessarti questo:
"Current State of Java for HPC"
http://proactive.inria.fr/userfiles/file/papers/ProActiveJavaStatusforHPC.pdf

 wrote:

In effetti, di applicazioni di CALCOLO scritte in java non ne conosco
(come per altro scritte in altri linguaggi), ma posso testimoniare che
in moltissimi casi Java è un ambiente molto veloce e performante. Sono
molti i server web più veloci di Apache2 giusto per fare un esempio.
Per quanto riguarda applicazioni "pesanti", o come preferisco dire io
"scalabili" (so che non sono per nulla sinonimi, ma il concetto IMHO è
che una applicazione che sai poter diventare pesante è meglio
progettarla fin dall'inizio scalbile) java è in un certo senso leader.
Da quello che so java difetta verso altri ambienti solo quando si
tratta di grafica (desktop) e matematica pura.
Tieni presente, però, che il campo dell' HPC ora si sta spostando in
massa verso cluster/grid/cloud, e in questo la tecnologia java la fa
da padrone.

 da padrone.
Mah... diciamo che essendo diffuso ovunque e' diffuso anche li.
-- 
-riko

 Mah... diciamo che essendo diffuso ovunque e' diffuso anche li.
Credi che la validità di Java sia soprattutto merito della sua diffusione e 
meno intrinsecamente legata al linguaggio (semplice domanda senza polemica)?
Si dispensa dai flames.
Grazie 

 meno intrinsecamente legata al linguaggio (semplice domanda senza polemica)?
1. non capisco la domanda
2. conseguentemente non capisco come si relaziona con quello che    
   ho detto.
In particolare non mi risulta che Java la faccia da padrone nell'HPC.
Posso benissimo sbagliare, ben inteso.
-- 
-riko

   ho detto.
Avendo scritto:
"Mah... diciamo che essendo diffuso ovunque e' diffuso anche li."
Ho dedotto (forse erroneamente?) che dal tuo punto di vista il maggior punto 
di forza di java sia la sua diffusione. 

 Scorpio.
Ma questa differenza nella velocità di esecuzione dove si vede? e quanto 
varia?
Ad esempio, se leggo vector da 10.000 elementi, ci sono differenze 
prestazionali?
Oppure, come dnaofwinners dice, molto è dovuto anche al fatto che le 
societa' che sviluppano software "particolari" (un'applicazione pesante di 
solito si rivolge ad uno specifico settore, tipo microsimulazione, codifica 
audio/video)sono strutturate ormai su C++ 


Grazie, adesso ci guardo 


Hai ragione, la definizione di applicazione pesante e' veramente vaga...
Ma effettivamente non mi sono mai passate sottomano applicazioni che in 
generale facciano compiti matematicamente onerosi...mi spiego con degli 
esempi: esistono applicazioni di grafica spinta in Java (premiere, gimp)  ? 
Tutti i software per il calcolo strutturale, i gis, programmi di simulzione 
e di micosimulazione (o almeno quelli largamente più utilizzati), non me ne 
e' mai capitato di vederne uno in java, e ti assicuro di averne visti 
parecchi tutt'ora supportati scritti in VB6 (!!!)...
Se ad esempio devo scorrere un vector da 500.000 oggetti, noto differenza di 
tempo di esecuzione tra Java e c++ ? (lasciando stare la memoria, ch java ne 
divora 35 meg solo per un Hello World :) 

 codifica audio/video)sono strutturate ormai su C++
Può darsi benissimo, ma questo credo sia l'effetto, non la causa. Se Java o 
un qualunque altro linguaggio risolve dei problemi in maniera efficace, ha 
senso percorrere la strada a cui sono abituato solo per "inerzia" ? Non 
credo. Se queste aziende sono strutturate su C++ è perchè C++ offre garanzie 
prestazionali che Java NON è in grado di offrire: penso alle esperienze di 
diversi conoscenti che lavorano nel campo telecom: quasi tutti mi hanno 
raccontato che i tentativi di utilizzare Java in contesti "execution - time 
critical "  (mi si passi l'espressione) sono stati abbandonati, mentre Java 
è diffusissimo negli stessi ambienti in tutte quelle applicazioni 
"corollarie" (portali, server applicativi etc).
Scorpio 

 
Secondo me è anche una questione di librerie. Chi fa del calcolo
'spinto' di solito si appoggia a librerie ben collaudate, per cui si
"adatta" al linguaggio in cui la libreria è disponibile. Non so in Java
come sia lo stato dell'arte, per la verità.
Per fare un esempio estremo: se uno deve progettar del sw per tenere in
orbita qualcosa prende la libreria "Wernher 2.1" scritta magari in
fortran che hanno usato anche i suoi nonni quando mandavan su lo Sputnik
e che non ha mai fatto errori di calcolo, o prende l'ultimo ritrovato
della tecnologia informatica?
-- 
bye
DKano

 divora 35 meg solo per un Hello World :) 
non credo, senza polemica, che questo sia un metro di valutazione 
sensato...

 'spinto' di solito si appoggia a librerie ben collaudate, 
quoto.
a volte si fa largo l'idea che il linguaggio a basso livello = 
prestazioni. in realtà per avere maggiori prestazioni occorre scrivere 
algoritmi più efficienti di quanto lo siano quelli già scritti nelle 
librerie dei linguaggi ad alto livello. il che francamente mi sembra 
nella maggior parte dei casi presuntuoso.

 divora 35 meg solo per un Hello World :)
1) Per le prestazioni non saprei, ma IMHO penso di no: come ho scritto
molte volte su questo NG, questo genere di cose java e fa IMHO più
velocemente del codice compilato, in quanto il Compilatore JIT ha più
possibilità di ottimizzare.
2) i 35 MB (che poi è una esagerazione...!) non è colpa di java, ma di
una particolare JVM.
Java (vedi KVM) può andare anche con una manciata di KB di RAM.
3) Ho provato una volta a fare un test, e java mi ha "fregato". Ho
fatto un ciclo for per eseguire un ciclo un numero spropositato di
volte (tipo, Integer.MAX_VALUE volte)..
in Assembler ci ha messo una decina di secondi. Java manco un ms.
Probabilemte perché ha fatto il ragionamento: se dentro nn esegui
nessuna op., io skippo (a ragione, ma ha vanificato il test.. oppure
dimostrando che le ottimizzazioni sono molto + spinte di quelle che
farebbe un programmatore libero di 'pasticciare' con il codice a basso
livello

 Java (vedi KVM) può andare anche con una manciata di KB di RAM.
C'è da dire che con una KVM (per esempio quella di J2ME) devi rinunciare a 
parecchie opportunità del linguaggio completo; il che è ovvio, visto che 
ogni cosa ha un costo in termini di risorse.
See you,
        Silver Drake
-- 
Paperblog: l'irriverente blog della famiglia pinguina
http://www.silverdrakenet.it/blog/blog.html
Quello che scrive il Drake è la verità (gg)
RADIO HELL: 
http://www.myspace.com/rh666

        Silver Drake
preciserei
della libreria completa, non del linguaggio
Ciao!

 sensato...
Mah, e' UN metro di paragone. Ne esistono a migliaia, ripeto, comodita' 
dell'IDE, conoscenze ed approfondimenti personali, numerosita' di framework, 
prima ancora di arrivare  a discorsi come questo...pero' anche il livello 
prestazionale e' da tenere in considerazione 

 codice a basso livello
quoto volentieri questo punto, in particolare l'ultimo concetto.