A proposito sempre di memoria e java, vorrei scrivere quanche osservazione utile per chi dovesse imbattersi in questa discussione: ho fatto i miei bei esperimenti con il mio programma e con jvisualvm e a proposito del System.gc() credo di aver capito quando la jvm invoca il gc: quando l'heap si riempie e ci sono oggetti non puntati: in pratica ho notato che il mio programma alloca in continuazione oggetti (pur avendo soltanto dei thread nello stato sleep), e appena l'heap e' pieno subito dopo avviene la deallocazione degli oggetti non puntati.
Forse non sara' utile come osservazione, ma per quelli che come me non hanno mai visto all'opera il gc lanciato dalla jre credo che risolvera' qualche dubbio.
Adesso i miei dubbi su java e memoria credo che siano risolti.

1)Volevo fare qualche domanda su...java e cpu: il mio programma ha dei thread in attesa: per esempio un thread che dorme per 24 ore per poi connettersi al sito e vedere se ci sono aggiornamenti; un altro invia e-mail dopo un certo numero di ore; etc... Ho notato che l'uso della cpu varia tra 0% e 1% (raramente 2%).
E' normale?(tenete presente che il mio programma si attiva dagli avvii automatici e rimane vivo per tutta la durata della sessione dell'utente, consumando quindi sempre quell' 1% periodico di cpu).

2)Il mio programma e' vincolato dal tempo: cioe' i thread devono aspettare sempre un certo numero di minuti o ore prima di compiere delle azioni. Quindi ho circa 5 thread in attesa, ma attesa costa cpu. Esiste un modo per mettere i thread in attesa per un certo periodo senza consumare cpu?(io credo di no)

Grazie sempre per tutte le risposte.