OSGi内存管理
我有关于 OSGi 内存管理的理论问题。
假设我们有一些 OSGi 容器(例如 Felix),并且假设我创建了一些存在内存泄漏的包。
这是我有一些问题:
- 有什么方法可以限制内存 这次“失败”的消费 捆?例如,如果超过 内存限制 – OSGi 容器会 给我发送电子邮件,将其卸载或 还有什么?
- 内存消耗如何 捆绑“A”影响捆绑“B”。为了 例如,如果“A”导致内存不足错误 它会毁掉整个 OSGi 容器?
I have theoretical question about OSGi memory management.
Let’s say we have some OSGi container (Felix for instance), and let’s suppose I created some bundle with memory leak.
And here are some questions that I have:
- Is there any way to limit memory
consumption for this “failure”
bundle? For example if it exceeds
memory limit – OSGi container would
send me an email, uninstall it or
something else? - How does memory consumption in
bundle “A” affect bundle “B”. For
example if “A” causes out of memory error
would it blow up whole OSGi
container?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
完整的 OSGi 框架在单个虚拟机中运行。只是每个包由不同的类加载器加载。但是所有捆绑包共享相同的堆,如果一个捆绑包泄漏内存,这会影响整个基于 OSGi 的应用程序。
所以,是的,如果 OutOfMemoryError 是由一个包引起的,那么整个容器就会“炸毁”。
(顺便说一句:如果有人将一个捆绑包放入执行
System.exit()
的容器中,那么整个容器会再次停止而不发出警告 - 捆绑包不会像某些“虚拟机”那样存在于隔离的上下文中在 jvm 内”)The complete OSGi framework runs in a single virtual machine. Only that each bundle is loaded by a different classloader. But all bundles share the same heap and if one bundle leaks memory, this affects the whole OSGi based application.
So yes, if an OutOfMemoryError is caused by one bundle, the whole container is "blown up".
(BTW: if someone drops a bundle into your container that does a
System.exit()
, then again the whole container is stopped without a warning - bundles do not live in isolated contexts like some "virtual machines inside a jvm")您可能还想查看这项研究:http://vmkit.llvm.org/publications/osgi_dsn。 html
You may also want to check this study: http://vmkit.llvm.org/publications/osgi_dsn.html