Ecco una cosa di cui si parla molto, ma di cui si sa “relativamente” poco. I linguaggi object oriented ci hanno abituato molto bene, ci consentono di creare e distruggere oggetti in modo molto semplice senza doverci occupare della gestione della memoria: chi ha utilizzato il C si ricorderà della funzione malloc per allocare la giusta quantità di memoria ad esempio per un’array, chi utilizza solamente Java penserà che cosa inutile basta dichiarare:
ArrayList array=new ArrayList();
senza occuparmi di quanta memoria utilizza l’array!
In una applicazione web (o desktop) dichiariamo gli oggetti che ci servono li usiamo e alla fine ce ne dimentichiamo, tanto implicitamente è naturale pensare “ci pensa il garbage collector”. Ma è sempre vero? La risposta è semplicemente “No”. Il garbage collector funziona bene, ma non è perfetto e può essere aiutato da qualche semplice accorgimento.
Questo è poi particolarmente vero per le applicazioni web che magari devono funzionare per diversi giorni (o mesi) senza essere mai riavviate. Nelle applicazioni desktop infatti nella peggiore delle ipotesi si “blocca” la singola applicazione. Chiudendo il programma o facendolo ripartire in linea teorica torna tutto come prima. Nel caso di un sito web dinamico o di una applicazione web invece si blocca l’intero sito precludendo di fatto l’utilizzo dei servizi o la consultazione da parte degli utenti collegati. In questa serie di articoli farò riferimento alle applicazioni web in particolare modo ed al loro sviluppo con Java.
In primo luogo un buon design del codice permette di evitare sprechi inutili di memoria. In secondo luogo non dobbiamo mai dimenticare che una pagina web può essere visitata da più di un utente contemporaneamente, e quindi sicuramente spreca molte risolte, anche in questo caso un design pulito aiuta a risparmiare memoria ed incrementare prestazioni.
In ogni caso anche un sito web concepito in modo assolutamente perfetto necessita di una determinata quantità di memoria per funzionare. E java permette di specificare quanta memoria assegnare alla Java Virtual Machine (JVM) tramite l’utilizzo della variabile JAVA_OPTS.
JAVA_OPTS=” -Xmx764m -Xms256m -server”
In questa riga ci sono 4 parametri interessanti che saranno passati alla JVM -Xmx764m indica di utilizzare fino a 764 megabyte di memoria per l’heap
-Xms256m indica di utilizzare un minimo di 256 megabyte di memoria per l’heap
-server indica alla JVM di funzionare in modalità server, in questa modalità la JVM ha una migliore gestione del garbage collector (inoltre c’è chi dice che ha performance superiori, ma non ho ancora verificato).
…continua a presto!!!