2012-03-12 28 views
6

En mi aplicación, ejecuto algunos subprocesos con código que no es de confianza y, por lo tanto, debo evitar un desbordamiento de memoria. Tengo un WatchDog que analiza el tiempo del hilo actual (los hilos fueron llamados en serie). Pero, ¿cómo puedo determinar el uso de la memoria? Solo conozco el uso de memoria de toda la máquina virtual con Runtime.totalMemory()? Si existe la posibilidad de descubrir el uso del hilo, o el uso del único proceso, sería genial. Con el uso de memoria del proceso, podría calcular el uso del hilo de todos modos.Uso de memoria de subproceso o proceso en Java

+6

Por definición, un subproceso comparte el mismo espacio de memoria que los otros subprocesos en el proceso. Tu pregunta no tiene mucho sentido. JVM = proceso. 1 proceso tiene muchos hilos. –

+0

JVM = proceso, eso significa que cada proceso de Java tiene una propia JVM? – Nicolas

+0

Sí. Cuando inicias java, comienzas una nueva JVM. –

Respuesta

2

Dado que una JVM que ejecuta un programa Java es un proceso Java, no tiene que preocuparse por eso. Todos los subprocesos comparten el mismo espacio de memoria en el proceso de JVM.

por lo tanto es suficiente confiar en

0

Lo que hay que hacer es ejecutar el código no confiable en su propio proceso/JVM. Esto es posible utilizando las interfaces JNI (si su sistema operativo lo permite).

1

Una aplicación Java no puede controlar la cantidad de memoria (o CPU) utilizada por sus subprocesos, , independientemente de si los subprocesos ejecutan código de confianza o no de confianza. No hay API para hacer esto en las JVM de generación actual. Y ciertamente no hay API para monitorear el uso de la memoria de un hilo. (Ni siquiera está claro si este es un concepto significativo ...)

La única forma de garantizar el uso de recursos del código Java que no es de confianza es ejecutar el código en una JVM separada y usar el nivel del sistema operativo controles de recursos (como ulimit, nice, sigstop, etc.) y "-Xmx" para limitar el uso de recursos de la JVM.


Hace algún tiempo, un Sol produce JSR 121 destinada a abordar este problema. Este JSR permitiría que una aplicación se divida en partes (llamadas "aislamientos") que se comunicaron a través del envío de mensajes, y ofreció la posibilidad de que un aislado supervise y controle a otro. Desafortunadamente, las API Isolate aún no se han implementado en ninguna JVM principal.

Cuestiones relacionadas