Uploaded image for project: 'Spring Framework'
  1. Spring Framework
  2. SPR-9296

Major Performance Problem in ApplicationContext Creation and Prototype Bean Lookup by Type

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Critical
    • Resolution: Duplicate
    • Affects Version/s: 3.1.1
    • Fix Version/s: None
    • Component/s: Core
    • Labels:
    • Last commented by a User:
      true

      Description

      In version 3.1.1 of the springframework, the creation of the application context and the lookup of beans by type, in particular the lookup of prototype beans is extremely slow (factor 10).
      The same creation and lookup process in spring 3.0.6 was significantly faster.
      The definition of the application context is done through java based bean configuration.

      Therefore we created a sample programm which can be used to reproduce the problem (program together with a gradle build file is attached, gradle run executes the test).
      This application uses javasssist to create 100 bean classes. Each bean class has 5 autowired bean properties. The bean properties are generated, such that no cyclic dependencies occur. Finally a configuration class containing the generated beans is constructed and loaded. All beans are created as singletons except one bean which has been created as prototype scope.
      After the application context is loaded a single bean is looked up from the application context 100 times. In the first case this is done with a bean of scope singleton. In the second case this is done with a bean of scope prototype.
      The same tests was issued on spring 3.1.1 and spring 3.0.6

      The results are as follows:

      ==== Spring 3.1.1 ====

      SingletonBean:
      ==============
      StopWatch 'SpringPerformanceTest': running time (millis) = 17004; [settingUpApplicationContext] took 15177 = 89%; [retrievingBeans] took 1827 = 11%

      PrototypeBean:
      ==============
      StopWatch 'SpringPerformanceTest': running time (millis) = 24400; [settingUpApplicationContext] took 13126 = 54%; [retrievingBeans] took 11274 = 46%

      ==== Spring 3.0.6 ====

      SingletonBean:
      ==============
      StopWatch 'SpringPerformanceTest': running time (millis) = 3110; [settingUpApplicationContext] took 2654 = 85%; [retrievingBeans] took 456 = 15%

      PrototypeBean:
      ==============
      StopWatch 'SpringPerformanceTest': running time (millis) = 3163; [settingUpApplicationContext] took 1790 = 57%; [retrievingBeans] took 1373 = 43%

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                cbeams Chris Beams
                Reporter:
                speedskater Robert Binna
                Last updater:
                Trevor Marshall
              • Votes:
                1 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:
                  Days since last comment:
                  6 years, 7 weeks, 1 day ago