En général, je règle -Xms512m
et -Xmx1g
de sorte que, lorsque la machine virtuelle Java démarre, elle alloue 512 Mo et augmente progressivement le tas à 1 Go si nécessaire. Mais je vois que ces valeurs ont la même valeur, à savoir 1g
dans une instance de serveur dédié. Y a-t-il un avantage à ce que les deux aient la même valeur?
Eh bien, il y a deux ou trois choses.
C'est très bien répondu ici - https://developer.jboss.org/thread/149559?_sscc=t
À partir de la documentation Oracle Java SE 8:
https://docs.Oracle.com/javase/8/docs/technotes/guides/vm/gctuning/sizing.html Par défaut, la machine virtuelle augmente ou réduit le segment de mémoire à chaque collection pour essayer de conserver la proportion d'espace libre par rapport aux objets vivants pour chaque collection dans une plage spécifique. Cette plage cible est définie sur Sous forme de pourcentage à l'aide des paramètres
-XX:MinHeapFreeRatio=<minimum>
et-XX:MaxHeapFreeRatio=<maximum>
. La taille totale est délimitée par -Xms<min>
et par-dessus par-Xmx<max>
. Définir-Xms
et-Xmx
sur la même valeur augmente la prévisibilité en supprimant la décision de dimensionnement la plus importante De la machine virtuelle. Cependant, la machine virtuelle est incapable de compenser si vous faites un mauvais choix.
si les valeurs -Xms et -Xmx sont identiques, JVM n'aura pas à ajuster la taille du segment de mémoire, ce qui signifie moins de travail pour la JVM et plus de temps pour votre application. mais si la valeur choisie est un mauvais choix pour -Xms, une partie de la mémoire allouée ne sera jamais utilisée car le tas ne sera jamais réduit et si c'est un mauvais choix pour -Xmx, vous obtiendrez OutOfMemoryError.
Il y a quelques avantages.
En général, je ferais du Xms une valeur que je suis sûr d’utiliser, et le double pour la marge disponible pour de futurs cas d’utilisation ou des situations que nous n’avons pas testées. c'est-à-dire une taille à laquelle nous ne nous attendons pas mais que nous pourrions utiliser.
En bref, le maximum est le point sur lequel vous préféreriez que le programme échoue plutôt que de l'utiliser.
Une autre raison, l’expansion de heap est un événement stop-the-world
; régler ces paramètres à la même valeur empêchera cela.