Bonjour,
Je sais comment allouer plus de mémoire à la JVM, mais avant cela comment savoir quelle est la taille de la mémoire allouée actuellement à la JVM ?
Je précise que j'utilise Eclipse et que je suis sous Mac.
Merci.
Emilie
Version imprimable
Bonjour,
Je sais comment allouer plus de mémoire à la JVM, mais avant cela comment savoir quelle est la taille de la mémoire allouée actuellement à la JVM ?
Je précise que j'utilise Eclipse et que je suis sous Mac.
Merci.
Emilie
mémoire par défaut pour la jvm 64M
Pour en allouer plus utiliser la ligne de commande java avec l'argument -Xmx avec à allouer
alloue 256 mégas à la jvm qui va se lancerCode:java -Xmx256M
Pour eclipse voire le fichier eclipse.ini et la ligne contenant -vmargs
OK. Merci.
Et y a t'il une limite ?
ça dépend de la RAM de ta machine...
Salut,
Avec Java 5.0, on peut utiliser la classe MemoryMXBean de la nouvelle API de management pour obtenir des informations sur l'état de la mémoire. On récupère une instance de MemoryMXBean via le code suivant :
Ensuite, il suffit d'utiliser la méthode getHeapMemoryUsage() qui retournera un objet MemoryUsage contenant le détail de la mémoire utilisé par votre application. Il contient ainsi les informations suivantes :Code:MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
- init : La taille initiale de la mémoire utilisé par l'application (généralement 0, sauf si l'on a utilisé l'option -Xms de la JVM).
- used : La quantité de mémoire qui est réellement utilisée par votre application.
- committed : La quantité de mémoire qui a été réservée auprès du système d'exploitation.
- max : La quantité maximale que la JVM est authorisée à réserver auprès du système d'exploitation (modifiable avec l'option [b]-Xmx(/b] de la JVM). Si l'application utilise plus de mémoire cela générera une OutOfMemoryError.
L'objet MemoryUsage possède bien entendu toutes les méthodes accésseurs pour accéder à ces éléments, mais également une redéfinition de la méthode [b]toString()(/b] afin de les afficher plus simplement. Ainsi le code suivant :
Donnera un résultat de le forme suivante :Code:System.out.println( memoryBean.getHeapMemoryUsage() );
A noter également qu'il est possible de surveiller la mémoire utilisé pour la JVM elle-même (et non pas par votre application) via la méthode getNonHeapMemoryUsage().Code:init = 0(0K) used = 436912(426K) committed = 2031616(1984K) max = 530907136(518464K)
Avec Java 1.4 ou les versions précédentes, on peut utiliser la classe Runtime et ses méthodes maxMemory(), totalMemory() et freeMemory() :
- maxMemory() représente la quantité maximale que la JVM est authorisée à réserver auprès du système d'exploitation (équivalent de l'attribut max).
- totalMemory() représente la quantité de mémoire qui a été réservée auprès du système d'exploitation (équivalent de l'attribut committed).
- freeMemory() représente la quantité de mémoire libre utilisable avant que la JVM n'alloue encore de la mémoire auprès du système (équivalent à la différence entre les attributs committed et used)
Ainsi pour obtenir un résultat similaire, on peut utiliser le code suivant :
Qui donnerait ceci :Code:
1
2
3
4 Runtime runtime = Runtime.getRuntime(); System.out.print( "used : " + ( runtime.totalMemory()-runtime.freeMemory() ) ); System.out.print( " committed : " + runtime.totalMemory() ); System.out.println( " max : " + runtime.maxMemory() );
Code:used : 446256 committed : 2031616 max : 530907136
Pour plus d'information sur la gestion de la mémoire : http://gfx.developpez.com/tutoriel/java/gc/
a++
PS : comme ce n'est pas dans la faq je le rajoute au thread de contribution...
Merci beaucoup pour toutes ces informations qui vont m'être très utiles.
Emilie