Finalmente!
A partir do Java 8u191, agora você tem as opções:
-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage
que pode ser usado para dimensionar o heap como uma porcentagem da RAM física utilizável. (que é o mesmo que a RAM instalada menos o que o kernel usa).
Consulte as Notas da versão do Java8 u191 para obter mais informações. Observe que as opções são mencionadas em um cabeçalho do Docker, mas na verdade elas se aplicam se você estiver no ambiente do Docker ou em um ambiente tradicional.
O valor padrão para MaxRAMPercentage
é 25%. Isso é extremamente conservador.
Minha própria regra: se o seu host é mais ou menos dedicado à execução do aplicativo java fornecido, você pode, sem problemas, aumentar drasticamente. Se você estiver no Linux, executando apenas daemons padrão e tiver instalado RAM a partir de 1 Gb ou mais, não hesitaria em usar 75% para o heap da JVM. Novamente, lembre-se de que isso representa 75% da RAM disponível , não a RAM instalada . O que resta são os outros processos de terra do usuário que podem estar em execução no host e os outros tipos de memória que a JVM precisa (por exemplo, para a pilha). No conjunto, isso normalmente se encaixa perfeitamente nos 25% restantes. Obviamente, com ainda mais RAM instalada, os 75% são uma aposta mais segura. (Eu gostaria que o pessoal do JDK tivesse implementado uma opção em que você pudesse especificar uma escada)
Definir a MaxRAMPercentage
opção fica assim:
java -XX:MaxRAMPercentage=75.0 ....
Observe que esses valores percentuais são do tipo 'duplo' e, portanto, você deve especificá-los com um ponto decimal. Você recebe um erro um tanto estranho se usar "75" em vez de "75.0".