por que há diferença nas estatísticas mostradas pelo unix e Java RunTime
Estou com alguns problemas de memória com meu aplicativo e preciso de ajuda para entender essas estatísticas.
O 'top' do Unix mostra essas estatísticas para o meu processo.
VSZ: 37.4g
RSS: 20.0g
Portanto, isso significa que atualmente 20g são trocados pelo processo e em uso.
No entanto, quando imprimo estatísticas de dentro do meu aplicativo usando a classe Runtime, recebo o seguinte:
Runtime.totalMemory() : 9.8G
Runtime.freeMemory() : 3.6G
Runtime.maxMemory() : 14.3G
Por que [Runtime.totalMemory () - Runtime.freeMemory ()] corresponde ao RSS? Essa é a memória atualmente em uso pelo processo. Há uma enorme diferença entre os dois números.
Além disso, o tempo de execução devolve a memória não utilizada (Runtime.freeMemory ()) de volta ao SO para uso por outros processos?
Observe que meus aplicativos estão sendo executados em um sistema de cache GemFire ponto a ponto configurado com caches compartilhados e replicados. Preciso otimizar o aplicativo para reduzir o consumo de memória.