2017-10-12 8 views
0

Je cours deux programmes Java dans BlueJ. Je veux être capable de savoir combien de mémoire le programme utilise pour une valeur d'entrée donnée. Y a-t-il un moyen de le faire?Comment trouver la quantité de mémoire utilisée par un programme?

+0

Votre question est probablement sans rapport avec BlueJ. Vous pouvez utiliser un autre IDE (ou un compilateur Java). Donc, je suppose que vous devez supprimer la balise 'bluej' –

Répondre

1

1) pour obtenir la quantité maximale de mémoire que votre application Java peut utiliser Runtime:

Runtime runtime = Runtime.getRuntime(); 
System.out.println("max memory: " + runtime.maxMemory()/1024); 

2) pour obtenir la quantité de mémoire que JVM a alloué pour votre application:

Runtime runtime = Runtime.getRuntime(); 
System.out.println("allocated memory: " + runtime.totalMemory()/1024); 

3) pour obtenir combien de mémoire est utilisée par votre application:

Runtime runtime = Runtime.getRuntime(); 
System.out.println("free memory: " + runtime.freeMemory()/1024); 
+1

Cela ne fonctionne que pour la mémoire allouée par le biais de Java –

+0

Nod mauvais pour une première réponse. Pour vos futures réponses: mettez en forme le code de manière appropriée (en l'indentant avec quatre espaces), et peut-être un lien vers la documentation pertinente –

0

Cela pourrait être operating system spécifique; notamment la JVM gère la mémoire allouée Java, mais vous pouvez appeler des fonctions externes en C++ en utilisant JNI qui allouent de la mémoire aussi (par exemple votre programme Java appelant OpenCV fonctions), et vous pourriez être intéressé par le virtual address space de votre process actuel. Sous Linux, vous pouvez utiliser proc(5) et lire et analyser /proc/self/statm ou /proc/self/stat ou /proc/self/status. Si votre processus a pid 1234, vous pouvez également essayer cat /proc/1234/maps ijn un autre terminal ou utiliser pmap(1). Sur d'autres systèmes d'exploitation, vous devrez plonger dans leur documentation appropriée.

Si vous ne vous souciez que de la mémoire directement utilisée par la JVM, utilisez la Runtime class en tant que answered by Hans.

BTW, votre JVM a un garbage collector, et donc de définir exactement quelle est la quantité de mémoire utilisée n'est pas trivial.