2009-06-14 7 views
12

Comme nous le savons tous, l'option java -Xmx est utilisée pour définir l'espace de segment maximal disponible pour un programme Java. Mais existe-t-il un moyen pour un programme Java de lire la valeur qui a été définie? Quelque chose comme System.getMaximumHeapSpace() (qui n'existe pas).Lecture de l'espace de segment maximal au moment de l'exécution

+0

Duplicata de http://stackoverflow.com/questions/433406/how-to-get-the-max-sizes-of-the-heap-and-permgen-fr-the-jvm? – Pool

+0

Un moyen non-programmatique est d'exécuter l'utilitaire 'jmap' disponible à partir de votre JDK. La syntaxe serait 'jmap -heap '. Le champ 'MaxHeapSize' indique la valeur' Xmx' définie sur ce processus Java. – asgs

Répondre

18

Il existe un Runtime.maxMemory qui, selon la documentation, renverra la quantité maximale de mémoire que la machine virtuelle Java tentera d'utiliser, mais il n'est pas spécifique s'il s'agit du maximum de mémoire de tas lors du lancement de la JVM.

Tout comme un test, j'ai écrit le programme suivant:

class MaxMemory { 
    public static void main(String[] args) { 
     System.out.println(Runtime.getRuntime().maxMemory()); 
    } 
} 

Les résultats de l'exécution est la suivante:

C:\coobird\>java -Xmx64m MaxMemory 
66650112 

C:\coobird\>java -Xmx128m MaxMemory 
133234688 

Ce utilise Java SE version 6 1.6.0_12 sur Windows .

Bien que les valeurs soient proches de 64 Mo (67 108 864 octets) et de 128 Mo (134 217 728 octets), elles ne le sont pas exactement.

+0

Je l'ai testé et il semble que ce soit la valeur définie par -Xmx. Merci. –

+0

Il semble être proche, mais pas exactement la valeur. – coobird

+0

Peut-être que les octets manquants ont été réservés pour l'espace PermGen –

3

Et je reçois des valeurs qui sont plus loin de la valeur Xmx:

java -Xmx64m MaxMemory 
59703296 

64 * 1024 * 1024 = 67108864

java -Xmx128m MaxMemory 
119341056 

128 * 1024 * 1024 = 134217728

C'est 11% de différence! (Le vôtre est seulement 0.7%, je gagne.)

java -version 
java version "1.6.0_22" 
Java(TM) SE Runtime Environment (build 1.6.0_22-b04) 
Java HotSpot(TM) Server VM (build 17.1-b03, mixed mode) 
running on Linux 2.6 
1

Je vois des résultats similaires.

-Xmx512m et je reçois 455M

-Xmx1024m et je reçois 910M

-je obtenir les mêmes résultats en utilisant ManagementFactory.getMemoryMXBean(). GetHeapMemoryUsage()

Ces écarts sont beaucoup trop grandes pour Etre ignoré.

Questions connexes