Un certain nombre de paramètres affectent la taille de la génération. Le diagramme suivant illustre la différence entre l'espace engagé et l'espace virtuel dans le tas. Lors de l'initialisation de la machine virtuelle, l'espace entier pour le tas est réservé. La taille de l'espace réservé peut être spécifiée avec l' -Xmx
option. Si la valeur du -Xms
paramètre est inférieure à la valeur du -Xmx
paramètre, tout l'espace réservé n'est pas immédiatement engagé dans la machine virtuelle. L'espace non engagé est étiqueté «virtuel» sur cette figure. Les différentes parties du tas (génération permanente, génération permanente et jeune génération) peuvent se développer à la limite de l'espace virtuel selon les besoins.
Par défaut, la machine virtuelle augmente ou réduit le segment de mémoire de chaque collection pour essayer de conserver la proportion d'espace libre pour les objets vivants dans chaque collection dans une plage spécifique. Cette plage cible est définie en pourcentage par les paramètres - XX:MinHeapFreeRatio=<minimum>
et -XX:MaxHeapFreeRatio=<maximum>
, et la taille totale est limitée en dessous par -Xms<min>
et au-dessus par -Xmx<max>
.
Valeur par défaut du paramètre
MinHeapFreeRatio 40
MaxHeapFreeRatio 70
-Xms 3670k
-Xmx 64m
Les valeurs par défaut des paramètres de taille de segment de mémoire sur les systèmes 64 bits ont été augmentées d'environ 30%. Cette augmentation est destinée à compenser la plus grande taille des objets sur un système 64 bits.
Avec ces paramètres, si le pourcentage d'espace libre dans une génération tombe en dessous de 40%, la génération sera étendue pour maintenir 40% d'espace libre, jusqu'à la taille maximale autorisée de la génération. De même, si l'espace libre dépasse 70%, la génération sera contractée de sorte que seulement 70% de l'espace soit libre, sous réserve de la taille minimale de la génération.
Les applications serveur volumineuses rencontrent souvent deux problèmes avec ces valeurs par défaut. L'un est un démarrage lent, car le segment de mémoire initial est petit et doit être redimensionné sur de nombreuses collections principales. Un problème plus urgent est que la taille de segment maximale par défaut est déraisonnablement petite pour la plupart des applications serveur. Les règles de base pour les applications serveur sont les suivantes:
- Sauf si vous rencontrez des problèmes avec les pauses, essayez d'allouer autant de mémoire que possible à la machine virtuelle. La taille par défaut (64 Mo) est souvent trop petite.
- La définition de -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 ne peut alors pas compenser si vous faites un mauvais choix.
En général, augmentez la mémoire à mesure que vous augmentez le nombre de processeurs, car l'allocation peut être parallélisée.
Il y a l' article complet