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.