2012-06-14 21 views

Respuesta

9

La cantidad de memoria asignada para una pila de subprocesos es específica de su sistema operativo JVM Version +. Está configurado con la opción -XX: ThreadStackSize (-Xss en versiones anteriores). Anecdóticamente 512KB es "normal", aunque es 1024 en Linux de 64 bits, que es probablemente la plataforma más crítica (la opinión de un tipo)

+0

Como dijo, es ThreadStackSize, que es de manera predeterminada 512 KB (para 32 bits), ¿esta memoria está reservada para una banda de rodadura en el momento de la creación o se consume dinámicamente cuando las llamadas al método están anidadas? – Ranger

+0

Está reservado. Lo que eso significa también depende de la plataforma, pero fundamentalmente si el sistema operativo no puede garantizar que pueda proporcionar la memoria, se producirá una excepción OOM en el momento en que se crea el hilo. (capaz de proporcionar la memoria puede incluir forzar datos de la aplicación en el espacio de intercambio, por supuesto.) Esto está relacionado con el contrato de la operación subyacente malloc. Esto también supone una JVM moderna con hilos nativos, por supuesto. Lo que sucede en el intérprete es asunto de JVM. – Affe

+1

Recuerde también que Linux tiene un límite de thread de usuario independiente de las limitaciones de memoria. "Sin memoria: no se puede crear un hilo nativo" de Java. No necesariamente indica que el problema fue en realidad una falta de RAM física. – Affe

2

Cada subproceso en una aplicación Java tiene su propia pila. La pila se usa para contener direcciones de retorno, argumentos de función/método de llamada, etc. Y por , el tamaño de pila predeterminado es 512 KB. Puede cambiar por -Xss comando jvm.

java -Xss128k 
Cuestiones relacionadas