J'ai une application Java qui utilise environ 15G sur une machine avec 16G. Je ne sais pas si je devrais définir la taille maximale du tas.
Si cette option est définie, le jvm mangera-t-il tout le bélier jusqu'à la limite, puis commencera à ramasser les ordures et à tout arrêter pendant qu'il débite 15G d'objets de tas?
Si ce n'est pas le cas, jvm nuira aux performances en n'utilisant pas tout le ram disponible sur la machine.
Ma machine virtuelle spécifique est: Serveur Java HotSpot (TM) 64 bits VM (version 1.6.0_03-b05 en mode mixte).
Merci
-Xmx15G
définira la taille maximale du tas à 15 Go. Java n'allouera que ce dont il a besoin pendant son exécution. Si vous ne le définissez pas, il utilisera uniquement la valeur par défaut. Pour plus d'informations sur la valeur par défaut, voir this post .
-Xms15G
définit le tas minimum à 15 gig. Cela oblige Java à allouer 15 Go d’espace de segment de mémoire avant son exécution, qu’il en ait besoin ou non.
En règle générale, vous pouvez définir les deux valeurs sur les valeurs appropriées en fonction de la manière dont vous optimisez la machine virtuelle Java.
En Java 6, la taille de segment maximale par défaut est déterminée par la quantité de mémoire système présente.
Selon la page Ordonnance du ramasse-miettes , la taille de tas maximale est la suivante:
Plus petit de 1/4ème de la mémoire physique ou 1 Go. Avant J2SE 5.0, la taille de segment maximale par défaut était de 64 Mo.
En utilisant le commutateur -Xmx
, vous pouvez modifier la taille maximale du segment de mémoire. Reportez-vous à la documentation Java
- du lanceur d’applications Java pour plus d’informations sur l’utilisation.
Si vous ne définissez pas de taille maximale de segment de mémoire (avec -Xmx
), la taille maximale par défaut n'est-elle pas uniquement de 64 Mo?
Donc, votre application ne va-t-elle pas échouer avec OutOfMemoryError
s si vous ne la définissez pas? Je suis confus sur cette question. Comment votre application fonctionne sans ce commutateur?