Xmxsize par défaut dans Java 8


Dans la documentation d'oracle j'ai trouvé:

-Xmxsize Spécifie la taille maximale (en octets) du pool d'allocation de mémoire en octets ... Défaut la valeur est choisie lors de l'exécution en fonction de la configuration du système.

Que signifie configuration du système?

Author: Vitaly, 2015-02-02

4 answers

Cela varie en fonction de l'implémentation et de la version, mais cela dépend généralement de la machine virtuelle utilisée (par exemple client ou serveur, voir les paramètres -client et -server) et de la mémoire système.

Souvent, sa valeur par défaut est 1/4ème de votre mémoire physique ou 1 Go (selon le plus petit).

Les options de configuration Java (paramètres de ligne de commande) peuvent également être "externalisées" vers des variables d'environnement, y compris le -Xmx, qui peut modifier la valeur par défaut (ce qui signifie spécifier une nouvelle valeur par défaut). Plus précisément le JAVA_TOOL_OPTIONS variable d'environnement est vérifiée par tous les outils Java et utilisé s'il existe (plus de détails ici et ici).

, Vous pouvez exécuter la commande suivante pour voir les valeurs par défaut:

java -XX:+PrintFlagsFinal -version

, Il vous donne une très longue liste, -Xmx est MaxHeapSize, -Xms est dans InitialHeapSize. Filtrez votre sortie (par exemple |grep sous linux) ou enregistrez-la dans un fichier afin que vous puissiez y effectuer une recherche.

 97
Author: icza, 2016-11-30 12:02:45

Comme vous l'avez mentionné, la valeur par défaut -Xmxsize (Taille maximale du tas) dépend de la configuration de votre système.

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

Ce qui signifie que si vous avez une mémoire physique de 8 Go de RAM, vous aurez Xmssizecomme Plus grand de 8*(1/6) et Plus petit de -Xmxsize comme 8*(1/4).

Vous pouvez vérifier votre taille de tas par défaut avec

Dans Windows:

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

Dans Linux:

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

Ces valeurs par défaut peuvent également être remplacées par le montant souhaité.

 22
Author: Sarat Chandra, 2017-04-12 12:03:52

Étonnamment, cette question n'a pas de réponse documentée définitive. Peut-être qu'un autre point de données apporterait de la valeur à d'autres personnes à la recherche d'une réponse. Sur mes systèmes exécutant CentOS (6.8, 7.3) et Java 8 (build 1.8.0_60-b27, serveur 64 bits):

La mémoire par défaut est de 1/4 de la mémoire physique, non limitée à 1 Go.

En outre, -XX:+PrintFlagsFinal imprime sur STDERR donc la commande pour déterminer la mémoire par défaut actuelle présentée par d'autres ci-dessus doit être modifiée comme suit:

java -XX:+PrintFlagsFinal 2>&1 | grep MaxHeapSize

Le ce qui suit est retourné sur le système avec 64 Go de RAM physique:

uintx MaxHeapSize                                  := 16873684992      {product}
 9
Author: brianNotBob, 2017-01-27 16:43:51

Sur ma machine virtuelle Ubuntu, avec 1048 Mo de RAM totale, java -XX:+PrintFlagsFinal -version | grep HeapSize imprimé : uintx MaxHeapSize := 266338304, ce qui représente environ 266 Mo et représente 1/4ème de ma RAM totale.

 0
Author: Binita Bharati, 2018-04-27 13:08:34