【问题标题】:OSGi memory managementOSGi 内存管理
【发布时间】:2011-08-26 11:39:23
【问题描述】:

我有关于 OSGi 内存管理的理论问题。

假设我们有一些 OSGi 容器(例如 Felix),假设我创建了一些存在内存泄漏的包。

以下是我的一些问题:

  1. 有没有办法限制内存 为这个“失败”而消费 捆?例如,如果它超过 内存限制——OSGi 容器会 给我发一封电子邮件,卸载它或 还有什么?
  2. 内存消耗如何 捆绑“A”影响捆绑“B”。为了 例如,如果“A”导致内存不足错误 它会炸毁整个 OSGi 容器?

【问题讨论】:

    标签: java osgi apache-felix


    【解决方案1】:

    完整的 OSGi 框架在单个虚拟机中运行。只是每个包由不同的类加载器加载。但是所有包共享同一个堆,如果一个包泄漏内存,这会影响整个基于 OSGi 的应用程序。

    所以是的,如果 OutOfMemoryError 是由一个 bundle 引起的,那么整个容器就会“炸毁”。

    (顺便说一句:如果有人将一个捆绑包放入您的容器中并执行System.exit(),那么整个容器也会在没有警告的情况下停止 - 捆绑包不会像某些“jvm内的虚拟机”那样存在于孤立的上下文中)

    【讨论】:

    • +1:但是,OSGi 框架的权限层应该保护您免受对 System.exit() 等方法的滥用调用。
    • 谢谢安德烈亚斯,这回答了我的问题。
    • Andreas,你还没有回答问题 1 - 你知道是否有办法限制包的内存吗?
    • 我怀疑这是可能的。我不知道计算堆上对象集合的内存占用的任何机制。
    【解决方案2】:

    您可能还想查看这项研究:http://vmkit.llvm.org/publications/osgi_dsn.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 2012-03-21
      相关资源
      最近更新 更多