2009-05-05 9 views
10

La idea sería ayudar a determinar el tamaño de pila óptimo para una aplicación Java determinada.¿Se puede obtener el tamaño de pila real utilizado por un hilo en Java después de algún tiempo de ejecución?

Una cosa que podría hacerse con esta información es crear una tabla de rango de tamaños de pila que los subprocesos podrían modificar al salir y que podrían descargarse periódicamente y al salir de la aplicación.

EDITAR: Esto es en el contexto de correr en máquinas de clientes con cargas de trabajo reales a las que no puedo acceder con perfil.

EDIT2 EDIT2: En respuesta a una respuesta, en (IIRC) 256 Kb por hilo, me he preguntado por un momento qué tan cerca está de la realidad de lo que se necesita (también me pregunto si esta pregunta podría no ser muy relevante porque quizás espacio de pila se asigna a petición). Tenemos un servidor de aplicaciones basado en el envío de mensajes y altamente enhebrado y que se ejecuta en todo, desde una computadora de mano ARM hasta octo-core Linux, a medios y mainframes. Sería bueno tener una idea de dónde (y si) podemos comerciar apila espacio para montón en sistemas con muchos manejadores de mensajes.

Hay algunas preguntas similares que son de interés, pero que son nativas/os-específica:

+0

Sólo debes conseguir una plataforma de 64 bits ... –

+7

@ Tom: Claro ... y voy a comprar uno para cada uno de mis clientes a lo largo de con 8 gigas de RAM, así que no tengo que pensar en el software que diseño y escribo. –

Respuesta

1

Pila m emory será difícil de obtener.

Lo mejor que puede hacer, y con bastante facilidad, es el uso de la memoria JVM a través de MemoryMXBean.

+0

¿Hay algo mejor? – Pacerier

0

Creo que puedes hacerlo con la nueva marca VisualVM también.

+0

Por mi comentario a la respuesta de Cuga del 5 de mayo: "Había pensado en eso (en realidad JVisualVM es mejor), y uso JProfiler ... pero esto es en el contexto de correr en máquinas de clientes con cargas de trabajo reales que no puedo obtener acceso de perfil a ". –

+0

Interesante: JVisualVM se incluye con Java 6; no sabía que también se distribuye a través de la web. Los complementos se ven bastante útiles. –

-1

Puede utilizar la clase Runtime para controlar la memoria de JVM de esta manera.

Runtime rt = Runtime.getRuntime(); 
System.out.println((rt.freeMemory()/1024) + "/" + (rt.maxMemory()/1024) + " kB"); 

O puede utilizar JConsole, JVisualVM e JInfo. Usted puede obtener más información acerca de estas herramientas Here:

http://java.sun.com/developer/technicalArticles/J2SE/monitoring/

+1

Eso no nos dice el tamaño de la pila. –

+0

De esta manera solo obtiene el uso de memoria de la instancia de JVM o solo puede obtener el uso de memoria de la secuencia actual? – Eldius

Cuestiones relacionadas