OSGI是当今的流行语。它具有松耦合,可重用性等许多优点。但是我想知道OSGI是否涉及任何开销,因为我必须在我的项目中使用。它是否会影响速度或任何其他类型的开销。请帮忙
谢谢
没有真正的开销。OSGi被设计为在内存非常受限的环境中工作,它实际上可以使执行速度更好,因为搜索每个加载请求的类空间更小。
对于天真的开发人员来说,总是有可能通过做愚蠢的事情来破坏性能,但对于任何环境都是如此。
在典型的OSGi环境中,您将拥有捆绑类加载器和OSGi服务,您可能会怀疑它们会影响性能。捆绑类装入器只是看到较小的类空间,因此它不应该比普通的类装入器慢。在某些情况下,它甚至可能像尼尔写的那样更快。OSGi 服务也不应影响性能。基本上,它们只是查找接口的 Impl 类的一种方式。因此,一旦你解决了 Impl 问题,它只是一个没有开销的方法调用。不涉及序列化和代理。
OSGi 对生产的最大负面影响是,由于使用不同的类加载器加载了多个版本的类,因此所需的 PermGen 空间增加了。除非使用 JRockit(根据需要从操作系统中分配),否则最大 PermGen 大小在 JVM 启动时是固定的,并且如果存在类加载器泄漏(很容易收集),则可能很难清除,这使得它可能是一个有限的资源。
没有实质性的性能影响。在极端情况下知道会发生什么可能会有一些认知负荷 - 例如,通过不同类加载器加载的"同一类"的实例将导致它们具有不同的类型(instanceof
在比较的情况下返回obj.getClass().getName()
返回true) - 但性能不会受到影响。