2015-05-05 14 views
6

Sto utilizzando le opzioni GC XX:+UseParNewGC-XX:+UseConcMarkSweepGC per la mia applicazione.Come rendere la memoria di rilascio JVM su OS

Come molti di voi già stanno vivendo, JVM è in grado di aumentare l'heap fino alla dimensione massima dell'heap, tuttavia non rilascia la memoria sul sistema operativo. Mi sono imbattuto in -XX:MaxHeapFreeRatio e -XX:MinHeapFreeRatio ma questi sono ignorati per Parallel Garbage Collectors.

Ci sono opzioni speciali per forzare la memoria di rilascio JVM su OS per la combinazione -XX:MaxHeapFreeRatio and -XX:MinHeapFreeRatio.

+0

Bene .. Anche se si trovano opzioni per queste cose, non è garantito che funzionino tra le architetture. – TheLostMind

+0

@TheLostMind - Sono '-XX: MaxHeapFreeRatio' e' -XX: MinHeapFreeRatio' garantiti per funzionare su JVM Linux a 64 bit Non sono sicuro se sopra i parametri '-XX: MaxHeapFreeRatio' e' -XX: MinHeapFreeRatio' sono solo per i netturbini seriali o no. Sto trovando citazioni contraddittorie per quello. – Pushkar

+0

XX: + UseParNewGC con il rapporto di heap libero massimo e minimo rilascia nuovamente la memoria al sistema operativo in java 1.8.0_73 in poi per la configurazione di Windows a 64 bit almeno. Se non lo si chiede esplicitamente a GC, tuttavia, potrebbe decidere di farlo solo se il sistema operativo è sotto pressione di memoria. Infine, non so se l'opzione UseConcMarkSweepGC cambi nulla di tutto ciò. – nsandersen

risposta

5

In Java 1.8.0_45 -XX: + UseG1GC riduce la memoria. Questo è il mio test:

MemoryPoolMXBean m = ManagementFactory.getMemoryPoolMXBeans().get(5); 
    System.out.println(m.getName()); 
    byte[] a = new byte[512 * 1024 * 1024]; 
    System.out.println(m.getUsage().getCommitted()/1024/1024); 
    a = null; 
    System.gc(); 
    Thread.sleep(1000); 
    System.out.println(m.getUsage().getCommitted()/1024/1024); 
+0

Devo modificare tutti i parametri tranne il cambio di Garbage Collector su G1GC? – Pushkar

+1

Se G1GC abilita la compressione allora -XX: MaxHeapFreeRatio e -XX: MinHeapFreeRatio dovrebbe funzionare anche –