web-dev-qa-db-fra.com

Quelle est la taille de segment maximale par défaut pour la machine virtuelle Java de Sun à partir de Java SE 6?

Quelle est la taille de segment maximale par défaut pour la machine virtuelle Java de Sun à partir de Java SE 6 (c'est-à-dire l'équivalent du paramètre -Xmx)?

Ressemble à Java SE 5 avec une machine de type serveur, c'est)

Plus petit de 1/4ème de la mémoire physique ou 1 Go.

Question bonus: pour la machine virtuelle Java d’IBM, vous pouvez le demander

Java -verbose:sizes -version

Pouvez-vous de même demander à la machine virtuelle Java de Sun?

Modifier :

J'ai utilisé Runtime.getRuntime (). MaxMemory pour confirmer min (mémoire physique/4, 1G), référencé dans documentation Sun .

62
dfrankow

Java 1.6.0_21 ou version ultérieure, ou alors ...

$ Java -XX:+PrintFlagsFinal -version 2>&1 | grep MaxHeapSize
uintx MaxHeapSize                         := 12660904960      {product}

Il semble que le min (1G) a été supprimé.

Ou sous Windows avec findstr

C:\>Java -XX:+PrintFlagsFinal -version 2>&1 | findstr MaxHeapSize
111
qmc

On peut demander avec du code Java:

long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes / 1024 / 1024 + "M");

Voir javadoc .

15
dfrankow

Avec JDK, vous pouvez également utiliser jinfo pour vous connecter à la machine virtuelle Java pour le fichier <PROCESS_ID> en question et obtenez la valeur pour MaxHeapSize:

jinfo -flag MaxHeapSize <PROCESS_ID>
14
user1754962

A partir de JDK6U18, vous trouverez ci-dessous des configurations pour la taille de segment de mémoire.

Dans la machine virtuelle client, la configuration de segment par défaut Java a été modifiée pour améliorer les performances des applications de client enrichi actuelles. Les tailles de segment initiale et maximale sont supérieures et les paramètres liés au garbage collection générationnel sont optimisés.

La taille de segment maximale par défaut est égale à la moitié de la mémoire physique, avec une taille de mémoire physique de 192 Mo ou, dans le cas contraire, un quart de la mémoire physique, avec une taille de mémoire physique de 1 Go. Par exemple, si votre ordinateur dispose de 128 Mo de mémoire physique, la taille de segment de mémoire maximale est de 64 Mo. Si la mémoire physique est supérieure ou égale à 1 Go, la taille de segment de mémoire maximale est de 256 Mo. La taille de segment de mémoire maximale n'est pas réellement utilisée par la machine virtuelle Java, à moins que votre programme ne crée suffisamment d'objets pour l'exiger. Une quantité beaucoup plus petite, appelée taille initiale du segment de mémoire, est allouée lors de l'initialisation de la machine virtuelle Java. Cette quantité est d'au moins 8 mégaoctets et sinon 1/64 de mémoire physique jusqu'à une taille de mémoire physique de 1 gigaoctet.

Source: http://www.Oracle.com/technetwork/Java/javase/6u18-142093.html

8
Jabir

une solution consiste à installer un jdk. Dans le dossier bin, il existe un utilitaire appelé jconsole (même visualvm peut être utilisé). Lancez-le et connectez-vous au processus Java approprié) et vous pourrez voir quels sont les paramètres de taille de tas et de nombreux autres détails.

JConsole peut être utilisé sur un réseau local, si vous spécifiez un port sur lequel vous souhaitez vous connecter lors du démarrage du service en question.

5
Inv3r53

Pour répondre à cette question, il est essentiel de savoir si Java VM est en mode CLIENT ou SERVEUR. Vous pouvez spécifier les options "-client" ou "-server". Sinon, Java utilise des règles internes; fondamentalement, win32 est toujours client et Linux est toujours serveur, mais consultez le tableau ci-dessous:

http://docs.Oracle.com/javase/6/docs/technotes/guides/vm/server-class.html

La documentation jre6u18 Sun/Oracle indique que le client est: la VM obtient la moitié de la mémoire physique si la machine a <= 192 Mo; 1/4 de la mémoire si la machine a <= 1 Go; max 256 Mo. Dans mon test sur un système WindowsXP 32 bits avec 2 Go de mémoire physique, Java alloué à 256 Mo, ce qui est conforme à la doc.

La documentation Sun/Oracle jre6u18 indique: serveur: comme le client, puis ajoute un langage source de confusion: pour une machine virtuelle Java 32 bits, la valeur maximale par défaut est de 1 Go et pour une machine virtuelle 64 bits, de 32 Go. Dans mon test sur une machine Linux 64 bits avec 8 Go physique, Java alloue 2 Go, ce qui correspond à 1/4 de physique; sur une machine Linux 64 bits avec 128 Go physique Java = alloue 32 Go, encore 1/4 des ressources physiques.

Merci à ceci SO post pour me guider:

Définition de la machine de classe serveur modifiée récemment?

3
chrisinmtown