2011-05-16 178 views
16

我有關於OSGi內存管理的理論問題。OSGi內存管理

假設我們有一些OSGi容器(比如Felix),假設我創建了一些內存泄漏的包。

這裏有一些問題,我有:

  1. 有什麼辦法來限制內存 消費這個「失敗」 捆綁?例如,如果它超過 內存限制 - OSGi容器將 給我發電子郵件,卸載它或 別的東西?
  2. 包「A」中的內存消耗如何影響包「B」。對於 例如,如果「A」導致內存不足錯誤 是否會炸燬整個OSGi 容器?

回答

18

完整的OSGi框架運行在單個虛擬機中。只有每個包由不同的類加載器加載。但是所有bundle共享相同的堆,如果一個bundle泄漏內存,這會影響整個基於OSGi的應用程序。

所以是的,如果OutOfMemoryError是由一個包引起的,那麼整個容器就會被「炸燬」。

(順便說一句:如果有人刪除一個包進入你的容器,做一個System.exit(),然後再整個容器被停止,而警告 - 包不住在孤立的環境中像一些「一個JVM內部的虛擬機」)

+0

+1:但OSGi框架的權限層應該保護您免受濫用像System.exit()這樣的方法的調用。 – 2011-05-16 14:35:54

+0

謝謝安德烈亞斯,那回答我的問題。 – altanis 2011-05-16 19:38:16

+0

安德烈亞斯,你還沒有回答過問題1 - 你知道是否有辦法限制捆綁的內存? – 2012-08-24 20:25:22