我有关于 OSGi 内存管理的理论问题。
假设我们有一些 OSGi 容器(例如 Felix),假设我创建了一些内存泄漏的包。
以下是我的一些问题:
- 有没有办法限制这个“失败”包的内存消耗?例如,如果它超出了内存限制——OSGi 容器会向我发送一封电子邮件、卸载它还是其他什么?
- 捆绑“A”中的内存消耗如何影响捆绑“B”。例如,如果“A”导致内存不足错误,它会炸毁整个 OSGi 容器吗?
我有关于 OSGi 内存管理的理论问题。
假设我们有一些 OSGi 容器(例如 Felix),假设我创建了一些内存泄漏的包。
以下是我的一些问题:
完整的 OSGi 框架在单个虚拟机中运行。只有每个包由不同的类加载器加载。但是所有包共享同一个堆,如果一个包泄漏内存,这会影响整个基于 OSGi 的应用程序。
所以是的,如果 OutOfMemoryError 是由一个包引起的,那么整个容器就会“炸毁”。
(顺便说一句:如果有人将一个捆绑包放入您的容器中执行 a System.exit()
,那么整个容器也会在没有警告的情况下停止 - 捆绑包不会像某些“jvm内的虚拟机”那样存在于孤立的上下文中)
您可能还想查看这项研究:http: //vmkit.llvm.org/publications/osgi_dsn.html