web-dev-qa-db-fra.com

Y a-t-il un avantage à définir Xms et Xmx sur la même valeur?

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?

3
user235273

Eh bien, il y a deux ou trois choses.

  1. Le programme commencera par la valeur -Xms et si la valeur est inférieure, il forcera éventuellement le GC à se produire plus fréquemment
  2. Une fois que le programme a atteint le segment de mémoire -Xms, le système d’exploitation jvm demande de la mémoire supplémentaire et finit par saisir -Xmx, ce qui nécessite un délai supplémentaire, ce qui vous évite d’avoir recours à jvm pour demander de la mémoire supplémentaire.

C'est très bien répondu ici - https://developer.jboss.org/thread/149559?_sscc=t

9
Fairoz

À 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.

4
Dev

Il y a quelques avantages.

  • si vous savez que la taille va augmenter au maximum, par ex. dans un repère, vous pouvez aussi bien commencer par la taille dont vous savez avoir besoin.
  • vous pouvez obtenir de meilleures performances en donnant au programme plus de mémoire qu'il pourrait naturellement se donner. YMWV

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.

4
Peter Lawrey

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. 

3
Eugene
  1. L'application subira fréquemment des GC avec une valeur inférieure à -Xms.
  2. Chaque fois que vous demandez plus de mémoire à votre système d'exploitation avec du temps.
  3. Surtout, si votre application est critique en termes de performances, vous voudrez certainement éviter que les pages de mémoire ne soient permutées vers/depuis un disque, car cela entraînerait une perte de temps pour le CPG. Pour éviter cela, la mémoire peut être verrouillée. Mais si Xms et Xmx ne sont pas identiques, la mémoire allouée après l'allocation initiale ne sera pas verrouillée.
0
Dexter