Nick Hristov opened SPR-17307 and commented
org.springframework.context.event.AbstractApplicationEventMulticaster.ListenerRetriever#getApplicationListeners method performs an unnecessary sort:
It creates a list which is a combination of this.applicationListeners and this.applicationListenerBeans and sorts that list. However, the sorting is unnecessary if either one of the two collections is empty. Furthermore, due to the fact that the sorting utilizes the reflection lookups, this sort can become an expensive unnecessary overhead in some use cases.
In my case, I load large amounts of data (> 1K of objects) via Spring Data Mongo which fires off events for every object loaded in the system.
So the sort operation ends up taking about 38% of the overall cost of the processing, more than any other component in my use case.
Affects: 5.0.5
Attachments:
Issue Links:
Backported to: 5.0.10
Nick Hristov opened SPR-17307 and commented
org.springframework.context.event.AbstractApplicationEventMulticaster.ListenerRetriever#getApplicationListenersmethod performs an unnecessary sort:It creates a list which is a combination of
this.applicationListenersandthis.applicationListenerBeansand sorts that list. However, the sorting is unnecessary if either one of the two collections is empty. Furthermore, due to the fact that the sorting utilizes the reflection lookups, this sort can become an expensive unnecessary overhead in some use cases.In my case, I load large amounts of data (> 1K of objects) via Spring Data Mongo which fires off events for every object loaded in the system.
So the sort operation ends up taking about 38% of the overall cost of the processing, more than any other component in my use case.
Affects: 5.0.5
Attachments:
Issue Links:
Backported to: 5.0.10