Управление памятью OSGi
У меня есть теоретический вопрос об управлении памятью OSGi.
Предположим, что у нас есть контейнер OSGi (например, Felix), и предположим, что я создал некоторый пакет с утечкой памяти.
И вот несколько вопросов, которые у меня есть:
- Есть ли способ ограничить память
потребление для этого "отказа"
расслоение? Например, если он превышает
ограничение памяти - контейнер OSGi
отправьте мне электронное письмо, удалите его или
что-то еще?
- Как потребление памяти в
пучок "А" влияет на пучок "В". Для
например, если "A" вызывает ошибку в памяти
это взорвало бы всю OSGi
контейнер?
Ответы
Ответ 1
Полная инфраструктура OSGi работает в одной виртуальной машине. Только то, что каждый комплект загружается другим загрузчиком классов. Но все связки имеют одну и ту же кучу, и если одна пучка утечки памяти, это влияет на все приложение на основе OSGi.
Итак, если OutOfMemoryError вызван одним пакетом, весь контейнер "взорван".
(Кстати: если кто-то сбрасывает пакет в ваш контейнер, который делает System.exit()
, то снова весь контейнер останавливается без предупреждения - пакеты не живут в изолированных контекстах, как некоторые "виртуальные машины внутри jvm" )
Ответ 2
Вы также можете проверить это исследование: http://vmkit.llvm.org/publications/osgi_dsn.html