Details

    • Type: Backport
    • Status: Resolved
    • Priority: Major
    • Resolution: Complete
    • Affects Version/s: 2.5.6
    • Fix Version/s: 3.1.2
    • Component/s: Core
    • Labels:
      None
    • Last commented by a User:
      true

      Activity

      Hide
      cbeams Chris Beams added a comment -

      commit d24d535c1db843403981cc2c3423e456046d5e69
      Author: Chris Beams <[email protected]>
      Commit: Chris Beams <[email protected]>
       
          Cache by-type lookups in DefaultListableBeanFactory
          
          Prior to this change, by-type lookups using DLBF#getBeanNamesForType
          required traversal of all bean definitions within the bean factory
          in order to inspect their bean class for assignability to the target
          type. These operations are comparatively expensive and when there are a
          large number of beans registered within the container coupled with a
          large number of by-type lookups at runtime, the performance impact can
          be severe. The test introduced here demonstrates such a scenario clearly.
          
          This performance problem is likely to manifest in large Spring-based
          applications using non-singleton beans, particularly request-scoped
          beans that may be created and wired many thousands of times per second.
          
          This commit introduces a simple ConcurrentHashMap-based caching strategy
          for by-type lookups; container-wide assignability checks happen only
          once on the first by-type lookup and are afterwards cached by type
          with the values in the map being an array of all bean names assignable
          to that type. This means that at runtime when creating and autowiring
          non-singleton beans, the cost of by-type lookups is reduced to that of
          ConcurrentHashMap#get.
          
          Issue: SPR-9448
          Backport-Issue: SPR-6870
          Backport-Commit: 4c7a1c0a5403b35dd812dae1f2a753538928bb32

      Show
      cbeams Chris Beams added a comment - commit d24d535c1db843403981cc2c3423e456046d5e69 Author: Chris Beams <[email protected]> Commit: Chris Beams <[email protected]>   Cache by-type lookups in DefaultListableBeanFactory Prior to this change, by-type lookups using DLBF#getBeanNamesForType required traversal of all bean definitions within the bean factory in order to inspect their bean class for assignability to the target type. These operations are comparatively expensive and when there are a large number of beans registered within the container coupled with a large number of by-type lookups at runtime, the performance impact can be severe. The test introduced here demonstrates such a scenario clearly. This performance problem is likely to manifest in large Spring-based applications using non-singleton beans, particularly request-scoped beans that may be created and wired many thousands of times per second. This commit introduces a simple ConcurrentHashMap-based caching strategy for by-type lookups; container-wide assignability checks happen only once on the first by-type lookup and are afterwards cached by type with the values in the map being an array of all bean names assignable to that type. This means that at runtime when creating and autowiring non-singleton beans, the cost of by-type lookups is reduced to that of ConcurrentHashMap#get. Issue: SPR-9448 Backport-Issue: SPR-6870 Backport-Commit: 4c7a1c0a5403b35dd812dae1f2a753538928bb32
      Hide
      flozano Francisco Lozano added a comment -

      This backport has been like an early X-mas present, thanks a lot!

      Show
      flozano Francisco Lozano added a comment - This backport has been like an early X-mas present, thanks a lot!

        People

        • Assignee:
          cbeams Chris Beams
          Reporter:
          cbeams Chris Beams
          Last updater:
          Francisco Lozano
        • Votes:
          1 Vote for this issue
          Watchers:
          4 Start watching this issue

          Dates

          • Created:
            Updated:
            Resolved:
            Days since last comment:
            4 years, 43 weeks ago