Comment est-Java par défaut de la taille du segment déterminé?
Si je omettre le -Xmxn
option à partir de la ligne de commande Java alors une valeur par défaut sera utilisée. Selon La documentation Java
"la valeur par défaut est choisie au moment de l'exécution en fonction de la configuration du système"
Ce que les paramètres de configuration système de l'influence de la valeur par défaut?
- configuration du système: a) le client jvm vs serveur jvm b) vs 32 bits 64 bits. Liens: 1) mise à jour de J2SE5.0 docs.oracle.com/javase/6/docs/technotes/guides/vm/... 2) réponse brève: docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/... 3) réponse: docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/... 4) client vs serveur: javacodegeeks.com/2011/07/jvm-options-client-vs-server.html
- c'est dur à comprendre à partir de liens ci-dessus. Afin de les résumer ici: taille Maximale du tas, pour le Client, la jvm est de 256 mo (il y a une exception, lire à partir de liens ci-dessus). Le nombre maximum de taille de segment de mémoire pour Serveur jvm de 32 bits est de 1 go et de 64 bits de 32 go est (encore une fois il y a des exceptions ici aussi. Veuillez lire qu'à partir des liens). Ainsi, ses 256 mo ou 1 go ou 32 go
Vous devez vous connecter pour publier un commentaire.
Sur Windows, vous pouvez utiliser la commande suivante pour trouver les paramètres par défaut sur le système où vos applications s'exécute.
Recherchez les options
MaxHeapSize
(pour-Xmx
) etInitialHeapSize
pour-Xms
.Sur un système Unix/Linux, vous pouvez le faire
Je crois que la sortie est en octets.
InitialHeapSize = 262803264
etMaxHeapSize = 4206886912
qui est sur le 256 MO et 4 GO si je ne me trompe pas. Est-ce à dire que chaque JVM commence comme si elle a été lancée avec-Xms256m -Xmx4g
options?java -XX:+PrintFlagsFinal -version | findstr /R /C:"HeapSize"
-version
partie n'est cependant pas nécessaire.-version
supprime le long de "l'utilisation" du texte surstderr
.Selon Garbage Collector Ergonomie [Oracle]:
Mise à JOUR:
Comme l'a souligné Tom Anderson dans son commentaire ci-dessus est pour le serveur-les machines de classe. De L'ergonomie dans l'5.0 Java Virtual Machine:
Cela est changé en Java 6 update 18.
En supposant que nous disposons de plus de 1 GO de la mémoire physique (assez fréquent de nos jours), il est toujours de 1/4 de votre mémoire physique.
greater than or equal to 1 gigabyte of physical memory results in a maximum heap size of 256 megabytes
Java 8 est de plus de 1/6ème de la mémoire physique de votre Xmssize (Minimum HeapSize) et moins de 1/4 de votre mémoire physique pour votre Xmxsize (Maximum HeapSize).
Vous pouvez Vérifier l' Java par défaut de la taille du segment par:
Dans Windows:
Dans Linux:
Votre mémoire physique & version de Java.
Ernesto est droit. Selon le lien qu'il a posté [1]:
[1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html
Pour la JVM IBM, la commande est la suivante:
Pour plus d'informations sur le logiciel IBM SDK pour Java 8: http://www-01.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/appendixes/defaults.html?lang=en
Ont un coup d'oeil à la documentation page
Client JVM par Défaut Initiale et de Tas Maximale Tailles:
La valeur par défaut taille maximale du tas est de la moitié de la mémoire physique jusqu'à une taille de la mémoire physique de 192 mégaoctets (MO) et sinon un quart de la mémoire physique jusqu'à une taille de la mémoire physique de 1 gigaoctet (GO).
Serveur JVM par Défaut Initiale et de Tas Maximale Tailles:
Sur 32 bits Jvm, la valeur par défaut taille maximale du tas peut être jusqu'à 1 GO si il est de 4 GO ou plus de mémoire physique. Sur 64 bits Jvm, la valeur par défaut taille maximale du tas peut être jusqu'à 32 GO si il est de 128 GO ou plus de mémoire physique
Vous pouvez spécifier le rapport initial et le maximum de tailles de tas en utilisant les drapeaux -Xms (initiale taille du segment de mémoire) et -Xmx (taille maximale du tas). Si vous savez combien de tas besoins de votre application fonctionne bien, vous pouvez définir -Xms et -Xmx à la même valeur
Un certain nombre de paramètres influent sur la génération de taille. Le diagramme suivant illustre la différence entre les commis de l'espace et de l'espace virtuel dans le tas. Lors de l'initialisation de la machine virtuelle, l'ensemble de l'espace pour le segment de mémoire est réservé. La taille de l'espace réservé peut être spécifié avec le
-Xmx
option. Si la valeur de la-Xms
paramètre est inférieure à la valeur de la-Xmx
paramètre, pas tout l'espace qui leur est réservé est immédiatement engagé à la machine virtuelle. Le non validées de l'espace est marqué "virtuel" dans cette figure. Les différentes parties de la tas (génération permanente, maître de la génération et de la génération des jeunes) peuvent se développer à la limite de l'espace virtuel en tant que de besoin.Par défaut, la machine virtuelle augmente ou réduit le tas à chaque collection pour essayer de garder la proportion de l'espace à vivre objets à chaque collection dans une plage spécifique. Cette fourchette cible est définie comme un pourcentage à l'aide des paramètres -
XX:MinHeapFreeRatio=<minimum>
et-XX:MaxHeapFreeRatio=<maximum>
, et la taille totale est délimitée ci-dessous par-Xms<min>
et au-dessus par-Xmx<max>
.Paramètre Valeur Par Défaut
MinHeapFreeRatio 40
MaxHeapFreeRatio 70
-Xms 3670k
-Xmx 64m
Les valeurs par défaut de la taille de tas de paramètres sur les systèmes 64 bits ont été mises à l'échelle par 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 production sera élargi afin de maintenir 40% d'espace libre, jusqu'à la taille maximale autorisée de la génération. De même, si l'espace libre supérieur à 70%, la production sera engagé, de sorte que seulement 70% de l'espace est libre, sous réserve de la taille minimale de la génération.
Gros serveur d'applications, souvent, une expérience de deux problèmes avec ces valeurs par défaut. Un est lent au démarrage, parce que le segment de mémoire initiale est faible et doit être redimensionnée sur de nombreuses collections importantes. Un de plus en plus pressant problème est que par défaut, la taille maximale du tas est trop petit pour la plupart des applications de serveur. Les règles de base pour les applications de serveur sont:
possible à la machine virtuelle. La taille par défaut (64 MO) est souvent trop
petite.
retrait le plus important de dimensionnement de la décision de la machine virtuelle.
Cependant, la machine virtuelle est alors dans l'impossibilité de compenser si vous faites
un mauvais choix.
En général, augmenter la mémoire, comme vous augmentez le nombre de
processeurs, puisque l'allocation peut être parallélisée.
Il est le l'article complet
Enfin!
De Java 8u191 vous avez maintenant les options:
qui peut être utilisé à la taille du segment de mémoire à un pourcentage d'utilisation de la RAM physique. (qui est la même que la RAM moins que le noyau utilise).
Voir Notes de publication pour Java8 u191 pour plus d'informations. Notez que les options sont mentionnées sous Docker le titre mais en fait elles s'appliquent, que vous êtes dans Panneau de l'environnement ou dans un environnement traditionnel.
La valeur par défaut pour
MaxRAMPercentage
est de 25%. C'est extrêmement conservateur.Ma propre règle: Si votre hôte est plus ou moins dédiés à l'exécution de la donnée d'une application java, alors vous pouvez sans problème augmenter de façon spectaculaire. Si vous êtes sur Linux, seulement en cours d'exécution standard des démons et d'avoir de la RAM installée à partir de quelque part autour de 1 Go et jusqu'alors je n'hésiterais pas à utiliser 75% de la JVM des tas de. Encore une fois, rappelez-vous que c'est 75% de la RAM disponible, pas la RAM installé. Ce qui est à gauche, c'est les autres utilisateurs des terres, les processus qui peuvent être en cours d'exécution sur l'hôte et les autres types de mémoire de la JVM besoins (par exemple, pour la pile). Tous ensemble, ce sera généralement s'adaptent bien dans les 25% qui est à gauche. Évidemment, avec encore plus de mémoire RAM installée sur le 75% est un moyen plus sûr et plus sûr pari. (Je souhaite que le JDK gens avaient mis en œuvre une option où vous pouvez spécifier une échelle)
Réglage de la
MaxRAMPercentage
option ressembler à ceci:Noter que ces valeurs en pourcentage sont de "double" de type et, par conséquent, vous doit les spécifier avec un point décimal. Vous obtenez un peu bizarre d'erreur si vous utilisez "75" au lieu de "75.0".
La
Xms
etXmx
sont le drapeau de la machine virtuelle Java (JVM):Xms
:initial and minimum
JVMheap size
Format
:-Xmx<size>[g|G|m|M|k|K]
Default Size
:-server
mode: 25% de mémoire physique libre, >=8 MO et <= 64 MO-client mode
: 25% de mémoire physique libre, >=8 MO et <= 16MBTypical Size
:-Xms128M
-Xms256M
-Xms512M
Function
/Effect
:Xms
taille de la mémoireXmx
:maximum
JVMheap size
Format
:-Xmx<size>[g|G|m|M|k|K]
Default Size
:<= R27.2
Windows
:75%
de mémoire physique totale jusqu'à1GB
Linux/Solaris
:50%
de la mémoire physique disponible jusqu'à1GB
>= R27.3
Windows X64
:75%
de mémoire physique totale jusqu'à2GB
Linux/Solaris X64
:50%
de la mémoire physique disponible jusqu'à2GB
Windows x86
:75%
de mémoire physique totale jusqu'à1GB
Linux/Solaris X86
:50%
de la mémoire physique disponible jusqu'à1GB
Typical Size
:-Xmx1g
-Xmx2084M
-Xmx4g
-Xmx6g
-Xmx8g
Function
/Effect
:Xmx
taille de la mémoireXmx
, serajava.lang.OutOfMemoryError
OutOfMemoryError
?Xmx
valeur-Xmx4g
à-Xmx8g
Plus en détail
voir la doc officielle: -X Options de ligne de Commande