web-dev-qa-db-fra.com

Application Java utilisant beaucoup de mémoire. Utilisez -Xmx?

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

21
Martin Redmond

-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.

18
Cogsy

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.

12
coobird

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 OutOfMemoryErrors si vous ne la définissez pas? Je suis confus sur cette question. Comment votre application fonctionne sans ce commutateur?

0
matt b