Alocação de memória heap inicial JVM [duplicado]
Especifiquei os valores -Xms e -Xmx iguais, digamos, 4 GB. Agora, quando eu inicio meu aplicativo de inicialização rápida, presumi que o sistema operacional alocará 4 GB de memória logo após iniciar o aplicativo, pois esse é o valor especificado usando o argumento -Xms. Mas quando verifiquei o conjunto residente do aplicativo e também a memória heap (usando JMX), posso ver que a memória alocada ainda é inferior a 1 GB. Isso significa que o sistema operacional não aloca necessariamente a memória especificada usando -Xms.
Desde já, obrigado.
Respostas
Você não disse qual sistema operacional e qual fornecedor / versão de JVM, mas freqüentemente o sistema operacional aloca as páginas preguiçosamente, ou seja, elas não estão na RAM ("residentes") a menos que necessário. Se seu aplicativo não precisa realmente dessa memória heap, ele não será residente. Além disso, há uma "política de tamanho adaptável" que pode reduzir o heap mesmo abaixo de "-Xms" se a ocupação for muito baixa:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gc-ergonomics.html