Opzione JVM -Xss - Cosa fa esattamente?


Risposte:


269

Ogni thread in un'applicazione Java ha il proprio stack . Lo stack viene utilizzato per contenere indirizzi di ritorno, argomenti di chiamata funzione / metodo, ecc. Quindi, se un thread tende a elaborare strutture di grandi dimensioni tramite algoritmi ricorsivi, potrebbe essere necessario uno stack di grandi dimensioni per tutti quegli indirizzi di ritorno e simili. Con Sun JVM, è possibile impostare tale dimensione tramite quel parametro.


11
Quindi, l'opzione -Xss viene utilizzata per limitare la quantità di memoria che uno stack consuma (memorizzando indirizzi di ritorno, variabili ecc.) E che limita indirettamente anche la profondità di uno stack? Ho ragione?
Instantsetsuna,

5
@instantsetsuna: penso che l'uso più comune sia probabilmente quello di aumentare il limite predefinito. (C'è sempre un limite.) Ma sì, stai controllando la dimensione della pila, che controlla quanto in profondità può arrivare la pila.
TJ Crowder,

come si fa a fare l'equivalente di questa impostazione XSS sul compilatore java (aka javac)? È un problema per coloro che usano librerie basate su scala che causano la ricorsione della coda nella compilazione delle classi - Andrew Norman 9 secondi fa
Andrew Norman

@AndrewNorman: Non compili le opzioni di runtime Java nel file di classe, è più una cosa specifica dell'ambiente. Se hai davvero bisogno di farlo nel codice, puoi scrivere una piccola classe principale il cui unico lavoro è quello di avviare la tua vera applicazione con le opzioni di cui hai bisogno.
TJ Crowder,

@AndrewNorman È possibile fornire flag di configurazione JVM con cui il compilatore deve eseguire utilizzando la -Jflagsintassi (ad es. -J-Xss).
francoisr,

166

Imposta infatti le dimensioni dello stack su una JVM.

Dovresti toccarlo in una di queste due situazioni:

  • StackOverflowError (la dimensione dello stack è maggiore del limite), aumenta il valore
  • OutOfMemoryError: impossibile creare un nuovo thread nativo (troppi thread, ogni thread ha uno stack di grandi dimensioni), diminuirlo.

Quest'ultimo di solito arriva quando il tuo Xss è impostato su una dimensione troppo grande, quindi devi bilanciarlo (test!)


3
Non necessariamente ogni volta in realtà. Sia SOE che OOME potrebbero verificarsi a causa di motivi diversi che dovrebbero essere risolti in modo diverso.
noego,

4
È vero, ma non ho detto -Xss è l'unica causa di SOE e OOME, ma viceversa - se impostato in modo errato, può causare uno dei due.
Adam Adamaszek,

5

Ogni thread ha uno stack utilizzato per variabili locali e valori interni. Le dimensioni dello stack limitano la profondità delle chiamate. Generalmente questo non è qualcosa che devi cambiare.


4

Se non sbaglio, questo è ciò che dice alla JVM quante chiamate successive accetterà prima di emettere StackOverflowError. Non qualcosa che desideri cambiare in generale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.