Opção JVM -Xss - O que faz exatamente?


Respostas:


269

Cada encadeamento em um aplicativo Java possui sua própria pilha . A pilha é usada para armazenar endereços de retorno, argumentos de chamada de função / método, etc. Portanto, se um segmento tende a processar grandes estruturas por meio de algoritmos recursivos, pode ser necessário uma pilha grande para todos esses endereços de retorno e outros. Com a Sun JVM, você pode definir esse tamanho por meio desse parâmetro.


11
Portanto, a opção -Xss é usada para limitar a quantidade de memória que uma pilha consome (armazenando endereços de retorno, variáveis ​​etc.) e que também limita indiretamente a profundidade que uma pilha pode obter? Estou correcto?
instantsetsuna

5
@instantsetsuna: Eu acho que o uso mais comum é provavelmente aumentar o limite padrão. (Sempre há um limite.) Mas sim, você está controlando o tamanho da pilha, que controla a profundidade da pilha.
TJ Crowder

como você faz o equivalente a essa configuração XSS no compilador java (também conhecido como javac)? Sua um problema para aqueles que usam bibliotecas baseadas em scala que causam grande recursão de cauda para acontecer na compilação das classes - Andrew Norman 9 segundos atrás
Andrew Norman

@AndrewNorman: Você não compila opções de tempo de execução Java no arquivo de classe, isso é mais uma coisa específica do ambiente. Se você realmente precisa fazer isso em código, pode escrever uma classe principal minúscula, cujo único trabalho é iniciar seu aplicativo real com as opções necessárias.
TJ Crowder

@AndrewNorman Você pode dar sinalizadores de configuração da JVM que o compilador deve executar usando -Jflagsintaxe (por exemplo, -J-Xss).
precisa

166

De fato, define o tamanho da pilha em uma JVM.

Você deve tocá-lo em uma destas duas situações:

  • StackOverflowError (o tamanho da pilha é maior que o limite), aumente o valor
  • OutOfMemoryError: não é possível criar um novo encadeamento nativo (muitos encadeamentos, cada encadeamento tem uma pilha grande), diminua-o.

O último geralmente ocorre quando o seu Xss está definido muito grande - então você precisa equilibrá-lo (teste!)


3
Na verdade, não necessariamente toda vez. SOE e OOME podem ocorrer devido a diferentes razões que devem ser corrigidas de maneira diferente.
Noego

4
É verdade, mas eu não disse que -Xss é a única causa para SOE e OOME, mas o contrário - se definido incorretamente, pode causar um dos dois.
Adam Adamaszek

5

Cada encadeamento possui uma pilha usada para variáveis ​​locais e valores internos. O tamanho da pilha limita a profundidade das chamadas. Geralmente isso não é algo que você precise alterar.


4

Se não me engano, é isso que diz à JVM quantas chamadas sucessivas serão aceitas antes de emitir um StackOverflowError. Não é algo que você deseja alterar em geral.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.