OSGi управление памятью - PullRequest
17 голосов
/ 16 мая 2011

У меня есть теоретический вопрос об управлении памятью OSGi.

Допустим, у нас есть некоторый контейнер OSGi (например, Felix), и давайте предположим, что я создал некоторый пакет с утечкой памяти.

И вот несколько вопросов, которые у меня есть:

  1. Есть ли способ ограничить потребление памяти для этого «сбойного» комплекта?Например, если он превышает предел памяти - контейнер OSGi отправит мне электронное письмо, удалит его или что-то еще?
  2. Как потребление памяти в пакете «A» влияет на пакет «B».Например, если «A» вызывает ошибку «Недостаточно памяти», будет ли он взрывать весь контейнер OSGi?

Ответы [ 2 ]

18 голосов
/ 16 мая 2011

Полная платформа OSGi работает на одной виртуальной машине.Только то, что каждый пакет загружается другим загрузчиком классов.Но все пакеты совместно используют одну и ту же кучу, и если один пакет теряет память, это влияет на все приложение на основе OSGi.

Так что да, если OutOfMemoryError вызвана одним пакетом, весь контейнер «взорван».1003 *

(Кстати: если кто-то бросает в ваш контейнер пакет, который выполняет System.exit(), то снова весь контейнер останавливается без предупреждения - пакеты не живут в изолированном контексте, как некоторые «виртуальные машины внутри jvm»)

4 голосов
/ 22 июля 2011

Вы также можете проверить это исследование: http://vmkit.llvm.org/publications/osgi_dsn.html

...