Around 20% of the startup time of our Felix OSGI container is spent creating attribute notifications for changed services in ServiceState#getAttributeChangeNotification. This is so slow because for each notification it calls bundleContext.getAllServiceReferences to get all service ids.
Here a few suggestions how this could be improved:
- The ServiceState could maintain its own list of service ids which is updated according to the service events
- The ServiceState could implement the NotificationEmitter directly and be aware when there are any listeners (in our case, there are mostly none).
- Make it possible to disable the attribute change notifications with configuration property.