2011-05-16 8 views
16

Tengo una pregunta teórica sobre la gestión de memoria OSGi.Administración de memoria OSGi

Digamos que tenemos un contenedor OSGi (por ejemplo, Felix), y supongamos que creé un paquete con pérdida de memoria.

Y he aquí algunas preguntas que tengo:

  1. ¿Hay alguna manera de limitar el consumo de memoria para este “fracaso” paquete? Por ejemplo, si excede límite de memoria - contenedor OSGi sería envíeme un correo electrónico, desinstálelo o algo más?
  2. Cómo afecta el consumo de memoria en "A" al paquete "B". Para el ejemplo , si "A" causa un error de falta de memoria ¿explotaría todo el contenedor OSGi ?

Respuesta

18

El marco OSGi completo se ejecuta en una sola máquina virtual. Solo que cada paquete es cargado por un cargador de clases diferente. Pero todos los paquetes comparten el mismo montón y si un paquete pierde memoria, esto afecta a toda la aplicación basada en OSGi.

Así que sí, si un OutOfMemoryError es causado por un paquete, todo el contenedor está "explotado".

(Por cierto: si alguien deja caer un paquete en el contenedor que hace un System.exit(), y de nuevo el contenedor entero se detiene sin una advertencia - paquetes no viven en contextos aislados como algunas "máquinas virtuales dentro de una JVM")

+0

+1: La capa de permisos del marco OSGi debe protegerlo contra llamadas abusivas a métodos como 'System.exit()'. –

+0

Gracias Andreas, eso responde mi pregunta. – altanis

+0

Andreas, no ha respondido a las preguntas 1: ¿sabe si hay alguna manera de limitar la memoria de un paquete? –

Cuestiones relacionadas