2011-06-14 9 views
6

¿Cuánta memoria (aproximadamente) se asigna cuando se crea una instancia de un hilo Java y se inicia?Cantidad de uso de memoria al crear subprocesos Java

Aquí está un ejemplo de código:

// Definition of the thread class 
class BasicThread extends Thread { 
    // This method is called when the thread runs 
    public void run() { 
    } 
} 
. 
. 
. 
// Create and start the thread 
Thread thread = new BasicThread(); 
thread.start(); 
+0

Depende de 32 bits o 64 bits VM. Lee este artículo: http://www.javaspecialists.eu/archive/Issue029.html ¿Pero por qué preguntas? ¿Quieres comenzar miles de hilos? –

+0

42 bytes (exactamente). –

Respuesta

7

bien el hilo (que es el objeto) en sí necesita un poco de espacio - que tiene una docena de variables y objetos (y yo soy demasiado perezoso para contar ellos correctamente) pero debería ser poco más de 200byte (básicamente tendrías que contar todas las primitivas y referencias [triviales, esas tienen tamaños fijos - pero las referencias dependen de tu máquina virtual] y luego calcular el tamaño de todos los objetos que están asignados por la clase [el punto de acceso VM tiene una sobrecarga de 2 palabras por objeto (3 si no hay variables locales en el objeto) y asigna un límite de 8 bytes])

Lo que realmente requiere espacio es la pila local de subprocesos y que puede verse afectada por el distintivo -Xss en la máquina virtual (aunque tenga en cuenta que todos los sistemas operativos tienen algunas limitaciones para el espacio máximo, puede influir en -limit en linux y seguramente de alguna manera en ventanas también).

Los valores predeterminados para hotspot son como sigue:

En Java SE 6, el valor predeterminado en SPARC es 512k en el de 32 bits VM, y 1024k en el 64-bit VM. En x86 Solaris/Linux es 320k en la máquina virtual de 32 bits y 1024k en la máquina virtual de 64 bits.

En Windows, el tamaño predeterminado de la pila de subprocesos se lee desde el archivo binario (java.exe). A partir de Java SE 6, este valor es 320k en la máquina virtual de 32 bits y 1024k en la máquina virtual de 64 bits.

+0

Gracias. Esto fue muy útil. –

0

IIRC, Windows de 32 bits reserva 64K de RAM física "real" para la pila de subprocesos inicial. Quizás el kernel podría reservar otra página de memoria no paginada, pero, básicamente, la única reserva inicial importante es la pila para el nuevo hilo. Si se salta esta pila, el administrador de memoria virtual la aumenta hasta un límite de lectura en el encabezado del exe y, por lo general, se configura en el tiempo del enlace. IIRC, este límite no puede reducirse por debajo de 1MB.

No se sabe cómo se comporta Linux-32. Presumiblemente, algo similar.

Rgds, Martin

Cuestiones relacionadas