Chiariamo subito una cosa. Lo swap file e/o partition (a seconda del S.O.) è gestito in automatico dal sistema operativo per la gestione della memoria "virtuale", per dare l'impressione di avere più memoria di quella fisica "swappando" pagine di memoria meno usate tra RAM e disco. La teoria .. beh è questa in sostanza.
Detto in generale, queste cose NON le gestisci da programma, né da C, né da Java (tantomeno da Java!!) né credo con qualunque altro linguaggio. Detto in altro modo (e ripeto, sempre generalizzando): da codice NON puoi dire al sistema di fare qualcosa con lo swap file/partition (aumentarlo .. ridurlo, rimuoverlo ...). Ripeto: a meno che il S.O. metta a disposizione una API super-specializzata per questo. Ma sicuramente non da Java.
In un programma, in generale, tu chiedi di allocare blocchi di memoria nello spazio di indirizzamento virtuale del processo. In C è una malloc (o altra funziona "nativa" del S.O.) in Java è es. un new int[numeroMoltoAlto] o new ClasseMoltoCorposa()
Cosa faccia il sistema in termini di quanto "swap" questo comporti su disco dipende ovviamente da cosa sta facendo, da quanto hai richiesto di memoria, dove/quando/quanto accedi alla memoria, ecc..
Java ha il "heap space", è lì che vengono allocati gli oggetti. Un heap space ha un valore iniziale e un massimo, che si possono anche impostare quando avvii la JVM. Oltre il massimo non puoi richiedere più memoria per gli oggetti dopo che la JVM è stata avviata.
Generalmente l'utilizzo della memoria virtuale del processo della JVM decresce poco (o niente) se tu rendi eleggibili per il GC gli oggetti.
C'è differenza (molta) tra la occupazione sul heap space e quanto avviene nativamente a livello di memoria del processo della JVM.
Questo è un comportamento che in parte si può migliorare con delle opzioni ultra-specifiche (e non standard) della JVM.
Vedi ad esempio le opzioni della JVM HotSpot di Oracle:
Java HotSpot VM Options
in particolare l'opzione -XX:MaxHeapFreeRatio
E per finire: senza sapere o vedere bene cosa fa il tuo programma Java, non potrei certamente dirti se usa bene gli oggetti, se male o che altro.
P.S. e lo ribadisco di nuovo: C, C++, Java, (altro...), heap space NON hanno nulla a che fare direttamente con gli swap file/partition.


Rispondi quotando
