0

OSGI 是当今的流行语。它具有松耦合、可重用性等许多优点。但我想知道我必须在我的项目中使用的 OSGI 是否涉及任何开销。它是否会影响速度或任何其他类型的开销。请帮忙

谢谢

4

3 回答 3

4

没有真正的开销。OSGi 被设计为在内存非常有限的环境中工作,它实际上可以提高执行速度,因为搜索每个加载请求的类空间更小。

天真的开发人员总是有可能通过做一些愚蠢的事情来搞砸性能,但任何环境都是如此。

于 2012-06-27T11:59:13.017 回答
2

使用 OSGi 的最大负面生产影响是由于使用不同的类加载器加载多个版本的类而需要的 PermGen 空间的增加。除非使用 JRockit(根据需要从 OS 分配),最大 PermGen 大小在 JVM 启动时是固定的,如果有类加载器泄漏(很容易收集),则很难清除,这可能使其成为一种有限的资源。

没有实质性的性能影响。知道在极端情况下会发生什么可能会有一些认知负担——例如,通过不同类加载器加载的“相同类”的实例将导致它们具有不同的类型(instanceof在比较返回 true 的情况下obj.getClass().getName()返回 false)——但是性能不会受到影响。

于 2012-06-27T15:41:14.397 回答
2

在典型的 OSGi 环境中,您将拥有捆绑类加载器和 OSGi 服务,您可能会怀疑它们会影响性能。捆绑类加载器只会看到较小的类空间,因此它不应该比普通的类加载器慢。在某些情况下,它可能会像 Neil 写的那样更快。OSGi 服务也不应该影响性能。基本上,它们只是为接口查找 Impl 类的一种方式。因此,一旦您解决了 Impl,它只是一个没有开销的方法调用。没有序列化,也没有涉及代理。

于 2012-06-27T15:38:54.330 回答