10
votes

Obtenir la taille de la mémoire du système d'exploitation de Java

Y a-t-il un moyen d'obtenir la taille de la mémoire totale sur le système d'exploitation à partir de Java? Utilisation de

Runtime.getRuntime().maxMemory()


4 commentaires

Qu'est-ce que vous devez savoir ?


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


Je demande ce dont vous avez besoin pour ?


Dans le cadre d'une bibliothèque qui consiste à collecter certaines statistiques d'utilisation (avec consentement de l'utilisateur, bien sûr)


4 Réponses :


3
votes

Il n'y a pas de moyen Java uniquement pour obtenir cette information. Vous pouvez utiliser runtime.exeec () pour démarrer les commandes spécifiques au système d'exploitation, par exemple. / usr / bin / libre sur Linux. Toujours sur les systèmes Linux, vous pouvez utiliser des classes d'accès aux fichiers Java ( fichierInputtream ) vers Analyse / proc / meminfo . .


0 commentaires

3
votes

Ce n'est pas possible avec pure Java, votre programme s'exécute sur la machine virtuelle Java et est donc isolé du système d'exploitation. Je suggère 2 solutions pour cela:

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


0 commentaires

15
votes
com.sun.management.OperatingSystemMXBean bean =
  (com.sun.management.OperatingSystemMXBean)
    java.lang.management.ManagementFactory.getOperatingSystemMXBean();
long max = bean.getTotalPhysicalMemorySize();
returns available RAM size for JVM (limited by 32bit), not the heap size.

1 commentaires

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



0
votes

Vous pouvez obtenir l'utilisation du RAM avec cela. Ceci est la même valeur que TaskManager dans Windows affiche

    com.sun.management.OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean)java.lang.management.ManagementFactory.getOperatingSystemMXBean();
    double percentage = ((double)bean.getFreeMemorySize() / (double)bean.getTotalPhysicalMemorySize()) * 100;
    percentage = 100 - percentage;
    System.out.println("RAM Usage: " + percentage + "%");


0 commentaires