Option JVM -Xss - Que fait-elle exactement?

229

Il indique ici que -Xss est utilisé pour "définir la taille de la pile de threads", qu'est-ce que cela signifie exactement? Quelqu'un pourrait-il m'aider à comprendre cela?

instantsetsuna
la source
Quelques exemples ici (pas le mien ...): herongyang.com/JVM/…
Christophe Roussy

Réponses:

269

Chaque thread d'une application Java a sa propre pile . La pile est utilisée pour contenir des adresses de retour, des arguments d'appel de fonction / méthode, etc. Donc, si un thread a tendance à traiter de grandes structures via des algorithmes récursifs, il peut avoir besoin d'une grande pile pour toutes ces adresses de retour et autres. Avec la JVM Sun, vous pouvez définir cette taille via ce paramètre.

TJ Crowder
la source
11
Ainsi, l'option -Xss est utilisée pour limiter la quantité de mémoire consommée par une pile (en stockant les adresses de retour, les variables, etc.) et qui limite également indirectement la profondeur qu'une pile peut obtenir? Ai-je raison?
instantsetsuna
5
@instantsetsuna: Je pense que l'utilisation la plus courante est probablement d' augmenter la limite par défaut. (Il y a toujours une limite.) Mais oui, vous contrôlez la taille de la pile, qui contrôle la profondeur de la pile.
TJ Crowder
comment faites-vous l'équivalent de ce paramètre XSS sur le compilateur java (aka javac)? C'est un problème pour ceux qui utilisent des bibliothèques basées sur scala qui provoquent une grande récursion de queue dans la compilation des classes - Andrew Norman il y a 9 secondes
Andrew Norman
@AndrewNorman: Vous ne compilez pas d'options d'exécution Java dans le fichier de classe, c'est plus une chose spécifique à l'environnement. Si vous avez vraiment besoin de le faire en code, vous pouvez écrire une petite classe principale dont le seul travail est de lancer votre vraie application avec les options dont vous avez besoin.
TJ Crowder
@AndrewNorman Vous pouvez donner des drapeaux de configuration JVM que le compilateur doit exécuter en utilisant la -Jflagsyntaxe (par exemple -J-Xss).
francoisr
166

Il définit en effet la taille de la pile sur une machine virtuelle Java.

Vous devez le toucher dans l'une de ces deux situations:

  • StackOverflowError (la taille de la pile est supérieure à la limite), augmentez la valeur
  • OutOfMemoryError: impossible de créer un nouveau thread natif (trop de threads, chaque thread a une grande pile), diminuez-le.

Ce dernier vient généralement lorsque votre Xss est réglé trop grand - alors vous devez l'équilibrer (test!)

Adam Adamaszek
la source
3
Pas nécessairement à chaque fois en fait. SOE et OOME peuvent se produire pour différentes raisons qui devraient être corrigées différemment.
noego
4
Certes, mais je n'ai pas dit que -Xss est la seule cause de SOE et OOME, mais l'inverse - s'il est mal réglé, il peut provoquer l'un des deux.
Adam Adamaszek
5

Chaque thread a une pile utilisée pour les variables locales et les valeurs internes. La taille de la pile limite la profondeur de vos appels. En général, ce n'est pas quelque chose que vous devez changer.

Peter Lawrey
la source
4

Si je ne me trompe pas, c'est ce qui indique à la JVM combien d'appels successifs elle acceptera avant d'émettre une StackOverflowError. Pas quelque chose que vous souhaitez changer en général.

Kellindil
la source