Memoria non attiva e swapping

0

Sto provando a elaborare un set di dati di grandi dimensioni in java e così ho impostato il mio -Xmx11G.

1 cosa che ho osservato è che quando uso xmx e Jvm si avvia, la quantità di memoria inattiva salta di circa quel tanto. Più tardi, vedo il mio file di scambio saltare su, ma la mia memoria inattiva ha ancora circa 7 GB di sinistra. Perché il sistema operativo non utilizza la memoria non attiva, ma sostituisce invece il disco ???

    
posta goh 28.01.2014 - 14:32
fonte

1 risposta

1

La risposta generale è che il modello di utilizzo della memoria di Java differisce da altre app poiché usa la garbage collection in una memoria di dimensioni fisse, recuperando tutta la memoria che potrebbe utilizzare in anticipo anziché recuperarla quando è necessaria ..

L'avvio è la JVM che alloca la memoria, quindi penso che la sua garbage collection tende ad accedere spesso alla memoria oppure che hai assegnato il grande set di dati Java e l'accesso solo a parte di esso. In questo modo si accede all'11G della memoria, ma non abbastanza spesso da essere contrassegnato come attivo. Un programma basato su C non avrà un thread in background che guardi tutte le pagine di memoria in modo che le pagine possano essere inattive abbastanza a lungo da essere scambiate.

Dall'esperienza, anche se su altri sistemi operativi, Java rallenta davvero se una parte della sua memoria viene scambiata e si regola la dimensione della sua VM in modo che non funzioni. Se hai bisogno di più memoria, ottieni più RAM o altera l'algoritmo per usarne di meno.

    
risposta data 28.01.2014 - 16:42
fonte

Leggi altre domande sui tag