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


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.


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!)


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.