2010-12-02 10 views
7

Existe-t-il un moyen d'obtenir la taille de la mémoire totale du système d'exploitation à partir de Java? L'utilisation deObtention de la taille de la mémoire du système d'exploitation à partir de Java

Runtime.getRuntime().maxMemory() 

renvoie la mémoire autorisée pour la machine virtuelle Java, et non pour le système d'exploitation. Est-ce que quelqu'un a un moyen d'obtenir ceci (à partir du code java)?

+0

De quoi avez-vous besoin pour savoir? –

+0

@ Thorbjørn: Si je cours sur une machine avec 2 Go de RAM mais que la JVM est limitée à 1 Go, je veux obtenir la taille de 2 Go et non la taille de 1 Go retournée par l'exemple de code. Ou demandez-vous pourquoi j'en ai besoin? –

+0

Je demande ce que vous en avez besoin _for_? –

Répondre

13
com.sun.management.OperatingSystemMXBean bean = 
    (com.sun.management.OperatingSystemMXBean) 
    java.lang.management.ManagementFactory.getOperatingSystemMXBean(); 
long max = bean.getTotalPhysicalMemorySize(); 

retourne la taille de la RAM disponible pour JVM (limitée par 32bit), pas la taille du tas.

+0

Super, bon à savoir! (+1) –

+1

"Restriction d'accès: Le type" OperatingSystemMXBean "n'est pas" API "dans Java 8, se référant spécifiquement à celui de' com.sun.management'. –

2

Il n'existe pas de méthode Java uniquement pour obtenir cette information. Vous pouvez utiliser Runtime.exec() pour démarrer des commandes spécifiques au système d'exploitation, par ex. /usr/bin/free sur Linux. Toujours sur les systèmes Linux, vous pouvez utiliser les classes d'accès aux fichiers Java (FileInputStream) pour analyser /proc/meminfo.

2

cela n'est pas possible avec du Java pur, votre programme s'exécute sur une machine virtuelle java, et par conséquent il est isolé du système d'exploitation. Je propose 2 solutions pour cela:

1) Vous pouvez utiliser un JNI et appeler une fonction C++ pour faire
2) Une autre option consiste à utiliser Runtime.exec(). Ensuite, vous devez obtenir les informations de "cat /proc/meminfo"

+0

La deuxième option fonctionne parfaitement. Merci. –