`
sswh
  • 浏览: 161720 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

关于Felix框架中的服务监听分发存在性能问题。

    博客分类:
  • OSGi
阅读更多


Felix框架中当注册新的服务时,会遍历触发所有满足条件的服务监听器。

如果系统中存在大量服务监听器时,新服务的注册性能明显下降。

实测数据,当服务监听器数量达到接近4000个时,新注册300个服务,
耗时将近20秒(CPU:i3双核,4G内存)。

----------
如果系统使用Felix,组件框架使用ipojo,可能会产生这样的情况。
ipojo的机制,每声明一个Component/Instance,每增加一个@Require/Bind
(即对其他服务的依赖),都会产生新的服务监听器,从而导致系统内存在
大量的服务监听器。

这些服务监听器的过滤表达式通常稍微复杂,例如:
(&(objectclass=org.apache.felix.ipojo.extender.ExtensionDeclaration)(ipojo.extension.name=component))
这样的形式。每一个新的服务注册或者修改,都会触发所有的监听器过滤表达式
被执行。

查看Felix框架关于服务注册时触发服务事件的代码,大概:
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(
            this, Request.SERVICE_EVENT, listeners, event, oldProps);



 







 

  • 大小: 13 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics