87 votes

Java obtient la mémoire disponible

Existe-t-il un bon moyen d'obtenir la mémoire restante disponible pour la JVM au moment de l'exécution ? Le cas d'utilisation de ceci serait d'avoir des services web qui échouent gracieusement quand ils approchent de leurs limites de mémoire en refusant les nouvelles connexions avec un message d'erreur sympathique "trop de personnes utilisent ce service, réessayez plus tard", plutôt que de mourir brusquement avec une erreur OutOfMemory.

Notez que cela n'a rien à voir avec le fait de calculer/estimer le coût de chaque objet au préalable. En principe, je pourrais estimer la quantité de mémoire occupée par mes objets et refuser les nouvelles connexions en fonction de cette estimation, mais cela semble un peu compliqué/fragile.

1voto

krishna Points 56

Pour obtenir la machine physique total , utilisé y mémoire libre nous pouvons également l'obtenir en utilisant java Runtime.exec() avec l'argument de commande free -m puis de l'interpréter comme ci-dessous :

Runtime runtime = Runtime.getRuntime();

BufferedReader br = new BufferedReader(
    new InputStreamReader(runtime.exec("free -m").getInputStream()));

String line;
String memLine = "";
int index = 0;
while ((line = br.readLine()) != null) {
  if (index == 1) {
    memLine = line;
  }
  index++;
}
//                  total        used        free      shared  buff/cache   available
//    Mem:          15933        3153        9683         310        3097       12148
//    Swap:          3814           0        3814

List<String> memInfoList = Arrays.asList(memLine.split("\\s+"));
int totalSystemMemory = Integer.parseInt(memInfoList.get(1));
int totalSystemUsedMemory = Integer.parseInt(memInfoList.get(2));
int totalSystemFreeMemory = Integer.parseInt(memInfoList.get(3));

System.out.println("Total system memory in mb: " + totalSystemMemory);
System.out.println("Total system used memory in mb: " + totalSystemUsedMemory);
System.out.println("Total system free memory in mb: "   + totalSystemFreeMemory);

0voto

Nambari Points 42066

Runtime.getRuntime().freeMemory() est un moyen d'obtenir libérer de la mémoire pour la JVM à ce moment-là pendant l'exécution. Si c'est un bon moyen (ou non), cela dépend entièrement de votre application.

0voto

Ryan Anderson Points 101
long freeMemory = Runtime.getRuntime().freeMemory();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X