View Full Version : [JAVA] una aiuto basilare per un profano
ciao a tutti
ho un problemino.
allora
io uso dei programmi di bioinformatica
molti di questi sono in JAVA (XXYYZZ.jar, per esempio).
quando li lancio, usualmente hanno un'interfaccia grafica in cui uno mette dentro gli input e i parametri che servono, poi si fanno girare e ti buttano fuori un output (testuale o altro).
il punto è
alcuni di questi programmi sono pesantini.
io ho un Acer Aspire 1690 (pentium M 1 GHz, 1 Gb di RAM, circa 3 Gb di file di swap su apposita partizioncina dedicata) con windows xp.
vorrei accelerare le prestazioni di questi programmini in java.
esiste un modo?
in questo momento nel task manager ho javaw.exe che sta occupando 97 Mb di ram circa.
come posso forzare l'utilizzo della ram e fare in modo che ne usi di più?
posso assegnare una priorità più alta agli eseguibili Java?
questo potrebbe velocizzare l'esecuzione?
ci sono altri accorgimenti?
altri applicativi da attivare/disattivare?
ho una partizione con Mandriva, è possibile che il medesimo applicativo fatto girare sotto linux sia più performante?
consigli di qualsivoglia natura?
grazie a tutti. ;)
vedo che non passa mai nessuno di qua :cry:
aspetterò ;)
intanto googlando (http://java.sun.com/javase/6/docs/technotes/tools/windows/java.html#options) ho trovato che dal pannello di controllo di windows posso settare la memoria mettendo
Xms1024M
Xss1024M
la prima assegna una memoria (minima) di 1 Gb all'HEAP Java (per me è arabo!)
la seconda assegna minimo 1 gb di ram allo "stack" (oddio checcacchio è sto STACK?? :cry: )
è meglio che aumenti l'heap o lo stack? a quanto?
l'input è un file di meno di 1 mb, una semplice tabella a circa 10 colonne e 12mila righe con dei valori che devono essere elaborati.
devo anche assegnare dei valori MASSIMI allo stack (con -Xmx, correggetemi) e all'heap (cone -Xsx), se si a quanto?
se non li imposto Java mi satura la memoria impiando la macchina?
thaaaanks :)
Bisognerebbe vedere i sorgenti dei vari programmi per capire come allocano i dati per esserne sicuri ma quasi sicuramente avrai a che fare con grosse matrici su cui lavorare quindi meglio aumentare l'heap. Poi prova ad aggiungere anche l'opzione -server al comando per lanciare i programmi dovresti avere un buon aumento di prestazioni.
banryu79
03-10-2008, 18:44
Un commento volante: non sapendo che cosa faccia realmente al suo interno il software in questione, è molto difficile capire se e quanto possa essere benefico (in termini di aumento di velocità di esecuzione) il fatto di aumentare la memoria disponibile per la Java Virual Machine.
Il collo di bottiglia potrebbe non essere affatto causato dalla memoria usata, ma da quanto pesanti ("cpu-intensive") sono i calcoli che questo software fa.
In tal caso (non sapendo nulla del software in questione mi prendo la libertà di ipotizzare a ruota libera) potrebbe anche essere che gli algoritmi scelti non siano i migliori per risolvere i problemi oppure che non siano stati ottimizzati bene.
O chissà cos'altro.
Spero di avere reso un minimo l'idea.
Comunque, se l'applicativo è basato su tecnologia Java, nel kit degli strumenti di sviluppo per Java c'è un tool che si chiama jstat (http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html) e che serve per raccogliere informazioni di varia natura su un applicativo a runtime.
Potrebbe (forse) servire per farsi almeno un'idea di massima, io non l'ho ancora mai usato però, e non so darti suggerimenti in merito.
@EDIT: postato in quasi contemporanea con Vicius: prova come ti ha suggerito è un ottimo consiglio.
se vi posto il .jar qualcuno è in grado (e ha voglia) di buttarci l'occhio? :stordita:
Bisognerebbe vedere i sorgenti dei vari programmi per capire come allocano i dati per esserne sicuri ma quasi sicuramente avrai a che fare con grosse matrici su cui lavorare quindi meglio aumentare l'heap. Poi prova ad aggiungere anche l'opzione -server al comando per lanciare i programmi dovresti avere un buon aumento di prestazioni.
grazie!!
i parametri li metto dal panello di controllo di JAVA, non posso lanciare da CMD perchè non mi riconosce la versione di JAVA (ignoro il motivo e non ho il tempo per scoprirlo).
mò provo con -server
(ma a che serveR? :asd: :asd: )
risolto! :yeah:
anche senza mettere -server
ho settato solo heap e stack a 768 MB (ditemi se è inutile o dannoso plz) e RIAVVIARE il PC.
prima di riavviare non cambiava niente neanche coi parametri di stack e heap, forse bisognava riavviare qualcosa di JAva.
per ora sembra che funzioni!
(dal task manager cmq non sembra che l'uso della memoria aumenti! bho...)
grazie a tutti.
se per caso vi interessasse, il programmino era STEM.
http://www.cs.cmu.edu/~jernst/stem/
questi programmi in JAVA si stanno diffondendo enormemente in bioinformatica perchè (credo) sono il modo più semplice per convertire algoritmi in C++ (usato dai bioinformatici) a qualcosa di usabile da noi comuni biologi.
prima o poi dovrò imparare meglio a gestirli...
stesso problema con un'altro applicativo...
la RAM usata è sempre sotto i 100 Mb anche con le stesse impostazioni...
un amico mi suggerisce di usare dei "JIT" o qlcs di simile...
http://java.sun.com/javase/technologies/desktop/media/jmf/
potrebbe servire a qualcosa? :stordita:
banryu79
10-10-2008, 09:32
http://java.sun.com/javase/technologies/desktop/media/jmf/
potrebbe servire a qualcosa? :stordita:
Non credo.
Quella è un'estensione utile per lo sviluppatore java che vuole incorporare contenuti multimediali nella sua applicazione, quindi non penso ti sia utile.
avevo capito che serviva ad "accelerare" java (forse è necessarioper i contenuti multimediali).
con dei JIT invecE? :stordita:
banryu79
10-10-2008, 11:07
Non so cosa intendi di preciso per JIT: normalmente è l'acronimo per Just In Time e visto che stiamo parlando di far girare software Java presumo che chi ti abbia detto di "usare dei JIT" intendesse dei compilatori Just-in-time.
Non so cosa intendesse: le Java Virtual Machine odierne (tipo HotSpot) già compilano just-in-time on demande (cioè a runtime, convertono parte del bytecode contenuto nei file .class dell'applicativo in codice nativo per migliorare la velocità esecuzione anche se spesso aumentano il consumo di memoria perchè tengono appunto in memoria sia il bytecode che il codice nativo).
Bisognerebbe vedere se, tramite qualche tool, fosse possibile tradurre tutto il bytecode dell'applicativo in codice nativo e generare un eseguibile.
Ma così facendo perderesti la portabilità attuale dell'applicativo.
grazie della spiegazione, avevo gli elementi in testa ma non li avevo ben collegati :)
la portabilità è un problema relativo: idealmente ottenendo il source potrei compilarlo per linux, e fare tutto da riga di comando.
Penso che la soluzione più semplice sia usare un computer più potente e stop.
grazie cmq dell'aiuto :)
Da quello che so, non mi pare sia un buon assemblaggio avere un Ghz di processore e un Gb di Ram.
Oggi i commercianti sfruttano l'ignoranza di molti acquirenti portandoli a credere che la Ram sia l'oggetto magico del PC, più è grande e più è veloce il PC, non è così, la Ram dev'essere inferiore al processore.
Personalmente ho un PC con processore Atlon di 1.1 Ghz e 512 Mb di Ram ed è più veloce di alcuni con Ram da 2 Gb che ancora si chiedono il perchè :D
Pace e bene :)
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.