2012-01-17 8 views
7

¿Es posible hacer que un subconjunto de subprocesos (por ejemplo, desde ThreadPool específico) asignen memoria del propio montón? P.ej. la mayoría de los subprocesos se asignan del montón común compartido, y pocos subprocesos de trabajo se asignan de montones individuales (1: 1 por subproceso).Asignación de montón específico de subprocesos

El objetivo es garantizar la ejecución segura del código en el entorno compartido: el trabajador típico no tiene estado y se ejecuta en un hilo separado, el procesamiento de una solicitud no debe consumir más de 4 MB de almacenamiento dinámico.

Actualización # 1 Re: ¿Pero por qué te preocupa "ejecución segura" e impredecible creciente del consumo del montón?

El punto es sobre el alojamiento seguro de código arbitrario de terceros de Java dentro de mi proceso. Uno de los puntos es no tener "memoria insuficiente" para todo el proceso debido a errores en el código de terceros.

Actualización # 2 Re: Como de limitar el uso de memoria por hilo, en Java el lenguaje es imposible

Según mi investigación antes de que yo he publicado esta pregunta mi opinión es lo mismo, Solo espero que me esté perdiendo algo.

Las únicas soluciones posibles alternativas para mi caso de uso como veo en este momento son ...

1) How much memory does my java thread take? - el uso de memoria hilo pista en un poco de hilo gobernador y poner fin a los malos hilos

2) Run Java code on my own JVM - Sí, es posible. Puede descargar una implementación de fuente abierta de JVM, modificarla ... :)

+1

No, la idea detrás de los hilos es ser lo más ligera posible, por lo que comparten el mismo montón; también haría la sincronización más difícil si lo permitieran.Pero, ¿por qué le preocupa la "ejecución segura" y el aumento impredecible del consumo de almacenamiento dinámico? – Viruzzo

+1

Las implementaciones de JVM típicas utilizan Thread Local Assignment Buffers (TLAB), donde cada subproceso tiene su propia área pequeña para realizar asignaciones pequeñas sin mucha sobrecarga de seguridad de subprocesos. Eso no aborda la disponibilidad sin embargo. RTSJ tiene algunas cosas relacionadas con hilos y montones, pero eso es sobre latencia. –

Respuesta

2

No. No existe un concepto de esto en Java. Hay un 'montón' de new que se asigna desde. La asignación de Java es segura para subprocesos. ¿Y por qué crees que hacer más montones causaría que los hilos consumieran menos memoria?

Si desea controlar el uso de memoria en un hilo, no asigne cosas.

En teoría, podría crear grupos de objetos reutilizables para un propósito como este, pero el rendimiento sería casi peor que la alternativa obvia.

3

Echa un vistazo Java nonblocking memory allocation - los hilos normalmente ya están asignando memoria desde sus propios bloques de asignación. Entonces, si la velocidad es preocupante, Sun lo ha hecho por usted.

Al limitar el uso de memoria por subproceso, en Java el lenguaje es imposible. Si es posible (o tiene sentido) en JVM y Java, la plataforma es una pregunta interesante. Por supuesto, puede hacerlo the same way as any memory profiler does, pero me temo que el sistema de gestión superará la aplicación en sí muy pronto.

2

Los hilos por diseño comparten todo el montón y otras regiones de la memoria. Solo la pila es realmente local, y este espacio puede ser limitado.

Si tiene tareas que desea ejecutar en su propia memoria y/o puede detenerse, debe ejecutarlas como un proceso separado.

Cuestiones relacionadas