web-dev-qa-db-fra.com

Xmxsize par défaut dans Java 8

Dans la documentation Oracle j'ai trouvé:

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

Que signifie configuration du système?

55
Vitaly

Cela varie en fonction de la mise en œuvre et de la version, mais cela dépend généralement de la VM utilisée (par exemple, client ou serveur, voir les paramètres -client et -server) et de la mémoire de votre système.

Souvent, sa valeur par défaut est 1/4 de votre mémoire physique ou 1 Go (la plus petite des deux).

Les options de configuration Java (paramètres de ligne de commande) peuvent également être "externalisées" vers des variables d'environnement, notamment le -Xmx, ce qui peut modifier la valeur par défaut (ce qui signifie spécifier une nouvelle valeur par défaut). Plus précisément, la variable d'environnement Java_TOOL_OPTIONS est vérifiée par tous les outils Java et utilisée si elle 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

Cela vous donne une longue liste, -Xmx est dans MaxHeapSize, -Xms est dans InitialHeapSize. Filtrez votre sortie (par exemple, |grep sous Linux) ou enregistrez-la dans un fichier afin de pouvoir y effectuer une recherche.

101
icza

Comme vous l'avez mentionné, la valeur par défaut -Xmxsize (Maximum HeapSize) 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 minimale de tas) et plus petit de 1/4ème de votre mémoire physique pour votre -Xmxsize (Taille maximale de tas).

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

Vous pouvez vérifier votre taille de pile 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 la quantité souhaitée.

27
Sarat Chandra

É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 aux autres à la recherche d'une réponse. Sur mes systèmes exécutant CentOS (6.8,7.3) et Java 8 (version 1.8.0_60-b27, serveur 64 bits):

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

De plus, -XX:+PrintFlagsFinal imprime sur STDERR afin que la commande permettant de déterminer la mémoire par défaut actuelle présentée par les autres utilisateurs ci-dessus soit modifiée comme suit:

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

Les éléments suivants sont renvoyés sur le système avec 64 Go de RAM physique:

uintx MaxHeapSize                                  := 16873684992      {product}
11
brianNotBob

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

0
Binita Bharati

À partir du 8, mai 2019:

La taille du segment de mémoire JVM dépend de la configuration du système, ce qui signifie:

a) client jvm vs serveur jvm

b) 32 bits vs 64 bits .

Liens:

1) Mise à jour depuis J2SE5.0: https://docs.Oracle.com/javase/6/docs/technotes/guides/vm/gc-ergonomics.html
2) réponse brève: https://docs.Oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html
3) Réponse détaillée: https://docs.Oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html#default_heap_size
4) client vs serveur: https://www.javacodegeeks.com/2011/07/jvm-options-client-vs-server.html

Résumé: (Il est difficile de comprendre les liens ci-dessus. Donc, résumez-les ici)

1) La taille de segment de mémoire maximale pour le client jvm est de 256 Mo (il existe une exception, à lire des liens ci-dessus).

2) La taille maximale de segment de mémoire pour Server jvm de 32 bits est de 1 Go et de 64 bits, de 32 Go (là aussi, il existe des exceptions. Veuillez lire cela à partir des liens).

Ainsi, la taille maximale de segment de mémoire jvm est la suivante: 256 Mo ou 1 Go ou 32 Go