Comment la taille de tas Java par défaut 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 Documentation Java "la valeur par défaut est choisie lors de l'exécution en fonction de la configuration du système".

Quels paramètres de configuration système influencent la valeur par défaut?

Author: Peter Mortensen, 2011-01-12

7 answers

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.

 399
Author: stones333, 2016-10-14 09:52:45

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 de tas par défaut était a minimum raisonnable, qui varie selon plate. Vous pouvez remplacer ceci par défaut en utilisant la ligne de commande-Xms option.

Taille Maximale du tas:

Plus petit de 1 / 4ème du physique mémoire ou 1 Go. Avant J2SE 5.0, le la taille maximale par défaut du tas était de 64 Mo. Vous pouvez remplacer 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 concerne les machines de classe serveur. De Ergonomie dans la machine virtuelle JavaTM 5.0:

Dans la plate-forme J2SE version 5.0 a 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 Go ou plus de mémoire physique

À l'exception des plates-formes 32 bits exécution d'une version de Windows le système d'exploitation. Sur tous les autres les plates-formes les valeurs par défaut sont identique aux valeurs par défaut pour la version 1.4.2.

Dans la plate-forme J2SE version 1.4.2 par par défaut les sélections suivantes étaient fait

  • taille initiale du tas de 4 Mo
  • taille maximale du tas de 64 Mo
 91
Author: dogbane, 2017-01-03 10:18:36

Ceci est modifié avec Java 6 update 18.

En supposant que nous ayons plus de 1 Go de mémoire physique (assez courant de nos jours), c'est toujours 1/4ème de votre mémoire physique.

 23
Author: ernesto, 2018-03-16 00:45:41

Ernesto a raison. Selon le lien qu'il a posté [1]:

Mise à jour de la configuration du tas JVM client

Dans la JVM cliente...

  • La taille maximale du tas par défaut est la moitié de la mémoire physique jusqu'à une taille de mémoire physique de 192 mégaoctets et sinon un quart de la mémoire physique jusqu'à une taille de mémoire physique de 1 gigaoctet.

    Par exemple, si votre machine dispose de 128 mégaoctets de mémoire physique, la taille maximale du tas est de 64 mégaoctets, et supérieur ou égal à 1 gigaoctet de mémoire physique se traduit par une taille de tas maximale de 256 mégaoctets.

  • La taille maximale du tas n'est pas réellement utilisée par la JVM à moins que votre programme ne crée suffisamment d'objets pour l'exiger. Une quantité beaucoup plus petite, appelée taille de tas initiale, est allouée lors de l'initialisation de la JVM. ...

  • ...
  • L'ergonomie de la configuration du tas JVM du serveur est maintenant la même que celle du client, sauf que le maximum par défaut la taille du tas pour les JVM 32 bits est de 1 gigaoctet, correspondant à une taille de mémoire physique de 4 gigaoctets, et pour les JVM 64 bits est de 32 gigaoctets, correspondant à une taille de mémoire physique de 128 gigaoctets.

[1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html

 14
Author: apl, 2017-11-06 00:59:04

La valeur par défaut est choisie lors de l'exécution en fonction de la configuration du système

Jetez un oeil à la documentation de page

Taille de tas par défaut

À moins que les tailles de tas initiale et maximale ne soient spécifiées sur la ligne de commande, elles sont calculées en fonction de la quantité de mémoire sur la machine.

  1. Taille initiale et Maximale du tas par défaut de la JVM client:

    La taille maximale du tas par défaut est la moitié de la mémoire physique pour 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).

  2. Taille initiale et Maximale du tas par défaut de la JVM du serveur:

    Sur les JVM 32 bits, la taille maximale du tas par défaut peut aller jusqu'à 1 Go s'il y a 4 Go ou plus de mémoire physique. Sur les JVM 64 bits, la taille maximale de tas par défaut peut aller jusqu'à 32 Go s'il y a 128 Go ou plus de mémoire

Quels paramètres de configuration système influencent la valeur par défaut?

Vous pouvez spécifier les tailles de tas initiale et maximale à l'aide des drapeaux -Xms (taille initiale du tas) 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)

 7
Author: Ravindra babu, 2016-10-13 16:05:04

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

 5
Author: n0mer, 2018-03-16 00:46:40

Java 8 prend plus de 1/6ème de votre mémoire physique pour votre Xmssize (Taille de tas minimale) et moins de 1 / 4ème de votre mémoire physique pour votre-Xmxsize (Taille de tas maximale).

Vous pouvez vérifier la taille de tas Java par défaut par:

Dans Windows:

java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

Dans Linux:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Quels paramètres de configuration système influencent la valeur par défaut?

Votre mémoire physique et votre Java version.

 5
Author: Sarat Chandra, 2018-03-16 00:48:03