Opción JVM -Xss: ¿Qué hace exactamente?

229

Aquí dice que -Xss se usa para "establecer el tamaño de la pila de subprocesos", ¿qué significa exactamente? ¿Alguien podría ayudarme a entender esto?

instantsetsuna
fuente
Algunos ejemplos aquí (no los míos ...): herongyang.com/JVM/…
Christophe Roussy

Respuestas:

269

Cada hilo en una aplicación Java tiene su propia pila . La pila se usa para contener direcciones de retorno, argumentos de llamada a función / método, etc. Por lo tanto, si un hilo tiende a procesar estructuras grandes a través de algoritmos recursivos, puede necesitar una pila grande para todas esas direcciones de retorno y demás. Con Sun JVM, puede establecer ese tamaño a través de ese parámetro.

TJ Crowder
fuente
11
Entonces, la opción -Xss se usa para limitar la cantidad de memoria que consume una pila (almacenando direcciones de retorno, variables, etc.) y que también limita indirectamente la profundidad que puede tener una pila. ¿Estoy en lo correcto?
instantsetsuna
55
@instantsetsuna: creo que el uso más común es probablemente aumentar el límite predeterminado. (Siempre hay un límite). Pero sí, estás controlando el tamaño de la pila, que controla qué tan profunda puede llegar la pila.
TJ Crowder
¿Cómo se hace el equivalente de esta configuración XSS en el compilador de Java (también conocido como javac)? Es un problema para aquellos que usan bibliotecas basadas en scala que causan una gran recursión de cola en la compilación de las clases - Andrew Norman hace 9 segundos
Andrew Norman
@ AndrewNorman: No compila las opciones de tiempo de ejecución de Java en el archivo de clase, eso es más una cuestión específica del entorno. Si realmente necesita hacerlo en código, puede escribir una pequeña clase principal cuyo único trabajo es iniciar su aplicación real con las opciones que necesita.
TJ Crowder
@ AndrewNorman Puede dar banderas de configuración JVM con las que el compilador debe ejecutarse utilizando la -Jflagsintaxis (por ejemplo -J-Xss).
francoisr
166

De hecho, establece el tamaño de la pila en una JVM.

Debe tocarlo en cualquiera de estas dos situaciones:

  • StackOverflowError (el tamaño de la pila es mayor que el límite), aumente el valor
  • OutOfMemoryError: no se puede crear un nuevo hilo nativo (demasiados hilos, cada hilo tiene una gran pila), disminuirlo.

Esto último generalmente ocurre cuando su Xss está configurado demasiado grande, entonces necesita equilibrarlo (¡prueba!)

Adam Adamaszek
fuente
3
No necesariamente todas las veces en realidad. Tanto SOE como OOME pueden ocurrir debido a diferentes razones que se deben solucionar de manera diferente.
noego
44
Es cierto, pero no dije que -Xss es la única causa de SOE y OOME, pero al revés, si se configura incorrectamente, puede causar uno de los dos.
Adam Adamaszek
5

Cada hilo tiene una pila que se usa para variables locales y valores internos. El tamaño de la pila limita la profundidad de sus llamadas. En general, esto no es algo que deba cambiar.

Peter Lawrey
fuente
4

Si no me equivoco, esto es lo que le dice a la JVM cuántas llamadas sucesivas aceptará antes de emitir un StackOverflowError. No es algo que desee cambiar en general.

Kellindil
fuente