2012-06-14 17 views

risposta

9

La quantità di memoria allocata per una pila di filo è specifica per il JVM versione + sistema operativo. È configurato con l'opzione -XX: ThreadStackSize (-Xss su versioni precedenti.) Aneddoticamente 512 KB è "normale", sebbene sia 1024 su Linux a 64 bit che è probabilmente la piattaforma più comunemente critica (opinione di un ragazzo in ogni caso)

+0

Come hai detto è il ThreadStackSize che è di default 512 KB (per 32 bit), questa memoria è riservata per un battistrada al momento della creazione o consumata dinamicamente come le chiamate al metodo sono nidificate? – Ranger

+0

È riservato. Ciò significa che è anche un po 'dipendente dalla piattaforma, ma fondamentalmente se il sistema operativo non può garantire che è in grado di fornire la memoria, un'eccezione OOM si verificherà al momento della creazione del thread. (in grado di fornire la memoria potrebbe includere forzare i dati delle applicazioni nello spazio di swap ovviamente). Questo è legato al contratto dell'operazione malloc sottostante. Anche questo presuppone naturalmente la JVM moderna con thread nativi. Quello che succede nell'interprete è l'attività di JVM. – Affe

+1

Ricorda anche che linux ha un limite del thread utente indipendente dai limiti di memoria. Java "Out Of Memory: impossibile creare il thread nativo". Non indica necessariamente che il problema era in realtà una mancanza di RAM fisica. – Affe

2

Ogni thread in un'applicazione Java ha il proprio stack. Lo stack viene utilizzato per contenere gli indirizzi di ritorno, gli argomenti di chiamata funzione/metodo, ecc. E per la dimensione dello stack predefinito è 512KB. È possibile modificare tramite il comando jvm -Xss.

java -Xss128k 
Problemi correlati