Comment la taille par défaut de Java heap est-elle déterminée?
si j'Omets l'option-Xmxn de la ligne de commande Java, une valeur par défaut est utilisée. Selon Java documentation "la valeur par défaut est choisie à l'exécution basée sur la configuration du système".
quels paramètres de configuration du système influencent la valeur par défaut?
7 réponses
sur les systèmes Windows, vous pouvez utiliser la commande suivante pour connaître les valeurs par défaut sur le système où vos applications s'exécutent.
java-XX:+PrintFlagsFinal-version / findstr HeapSize
recherchez les options MaxHeapSize
(pour -Xmx
) et InitialHeapSize
pour -Xms
.
sur un système Unix / Linux, vous pouvez faire ""
java-XX:+PrintFlagsFinal - version / grep HeapSize
je crois que la sortie résultante est en octets.
Selon Garbage Collector Ergonomie [Oracle] :
taille initiale du tas:
plus grand de 1 / 64ème de la mémoire physique de la machine sur la machine ou certains minimum raisonnable. Avant J2SE 5.0, la taille initiale par défaut du tas était minimum raisonnable, variable selon les plate. Vous pouvez remplacer cette par défaut en utilisant la ligne de commande-Xms option.
taille maximale du tas:
plus petit de 1 / 4ème de la mémoire physique ou 1 Go. Avant J2SE 5.0, le la taille maximale par défaut du tas était de 64 Mo. Vous pouvez modifier cette valeur par défaut en utilisant l'-Xmx option de ligne de commande.
mise à jour:
comme L'a souligné Tom Anderson dans son commentaire, ce qui précède est pour les machines de classe serveur. De L'ergonomie dans le 5.0 JavaTM Machine Virtuelle :
Dans la plate-forme J2SE version 5.0 d'un classe de machine appelée un la machine de classe serveur a été définie comme une machine avec
- 2 processeurs physiques ou plus
- 2 ou plus Goctets de mémoire physique
à l'exception des plateformes 32 bits exécution D'une version de Windows le système d'exploitation. Sur tous les autre les plates-formes les valeurs par défaut sont identique aux valeurs par défaut pour la version 1.4.2.
dans la version 1.4.2 de la plate-forme J2SE par défaut les sélections suivantes ont été fabrication 151930920"
- initiale taille du segment de mémoire de 4 Mo
- taille maximale du tas de 64 Mo
ceci est modifié avec Java 6 update 18 .
en supposant que nous avons plus de 1 Go de mémoire physique (assez commun ces jours-ci), c'est toujours 1/4ème de votre mémoire physique.
Ernesto a raison. Selon le lien qu'il a publié [1]:
Client de mise à Jour du segment de la JVM de configuration
dans le Client JVM...
la taille maximale par défaut est la moitié de la mémoire physique jusqu'à une taille de la mémoire physique de 192 mégaoctets et autrement un quart de la mémoire physique jusqu'à une taille de la mémoire physique de 1 gigaoctet.
pour par exemple, si votre machine a 128 mégaoctets de mémoire physique, alors la taille maximale de tas est de 64 mégaoctets, et plus grand ou égal à 1 gigaoctet de mémoire physique résulte en une taille maximale de tas de 256 mégaoctets.
la taille maximale d'un tas n'est pas réellement utilisée par la JVM à moins que votre programme ne crée suffisamment d'objets pour le nécessiter. Un montant beaucoup plus petit, appelé la taille initiale du tas, est alloué lors de l'initialisation de JVM. ...
- ...
- l'ergonomie de configuration de tas du serveur JVM est maintenant la même que celle du Client, sauf que la taille maximale de tas par défaut pour les JVM 32 bits est de 1 gigaoctet , ce qui correspond à une taille de mémoire physique de 4 gigaoctets, et pour les JVM 64 bits est de 32 gigaoctets , ce qui correspond à une taille de mémoire physique de 128 gigaoctets.
[1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html
la valeur par défaut est choisie à l'exécution en fonction de la configuration du système
Avoir un coup d'oeil à la documentation page
Taille De Tas Par Défaut
sauf si la taille initiale et la taille maximale des tas sont spécifiées sur la ligne de commande, elles sont calculées en fonction de la quantité de mémoire sur la machine.
-
Client JVM taille initiale et taille maximale par défaut:
la taille de tas maximale par défaut est la moitié de la mémoire physique jusqu'à une taille de mémoire physique de 192 mégaoctets (MB) et autrement un quart de la mémoire physique jusqu'à une taille de mémoire physique de 1 gigaoctet (GB) .
-
Serveur JVM par Défaut Initiale et Maximale Tailles de Tas:
sur 32 bits JVMs, la taille maximale par défaut de tas peut aller jusqu'à 1 Go s'il y a 4 Go ou plus de mémoire physique . sur JVM 64 bits, la taille maximale par défaut de tas peut aller jusqu'à 32 Go s'il y a 128 Go ou plus de mémoire physique
quels paramètres de configuration du système influencent la valeur par défaut?
vous pouvez spécifier la taille initiale et la taille maximale des tas en utilisant les drapeaux - Xms (taille initiale du tas) et - Xmx (taille maximale du tas). Si vous savez combien votre application doit fonctionner correctement, vous pouvez définir - Xms et - Xmx à la même valeur
pour la JVM IBM, la commande est la suivante:
java -verbose:sizes -version
pour plus d'informations sur le SDK IBM 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
Java 8 prend plus de 1/6 de votre mémoire physique pour votre Xmssize (minimum HeapSize) et moins de 1/4 de votre mémoire physique pour votre-Xmxsize (Maximum HeapSize).
vous pouvez vérifier le taille Java par défaut par:
Dans Windows :
java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
In Linux :
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
quels paramètres de configuration du système influencent la valeur par défaut?
votre mémoire physique et votre version Java.