Uploaded image for project: 'Maven'
  1. Maven
  2. MNG-6030

ReactorModelCache do not used effectively after maven version 3.0.5 which cause a large memory footprint

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    Description

      after version 3.0.5 we found a very big memory consumption with maven. needed for build memory grows from 1G to 5G

      According to current implementation there were change with commit https://git-wip-us.apache.org/repos/asf?p=maven.git;a=commit;h=e778ea67121f17232a7dced3fb4f0a205ffa64af
      https://issues.apache.org/jira/browse/MNG-5312

      private ModelBuildingRequest getModelBuildingRequest( InternalConfig config )
          {
      @@ -256,7 +256,7 @@ public class DefaultProjectBuilder
               request.setUserProperties( configuration.getUserProperties() );
               request.setBuildStartTime( configuration.getBuildStartTime() );
               request.setModelResolver( resolver );
      -        request.setModelCache( config.modelCache );
      +        request.setModelCache( new ReactorModelCache() );
      
               return request;
           }
      

      and as result new ReactorModelCache created for each ModelBuildingRequest which is created new to parse each pom.xml included in the build as module.

      so if there is a big projects with a lot of modules ModelBuildingRequest is created for each of them and parse result is not reused between modules. and if all this modules has the same parent pom it parsed each time and stored as many times as many ModelBuildingRequest was created. As parent pom often contains dependencies, dependencyManagement and common information for all modules it cause a larger memory footprint then was before. In version 3.0.5 and earlier ReactorModelCache was single and was reused between ModelBuildingRequest.

      in our cause footprint grew from 1g to 5g.

      it will be better to reuse result of parsing pom files between ModelBuildingRequests.

      Attachments

        1. generate.heavy.parent.pom.and.deep.hierarchy.groovy
          6 kB
          Andriy
        2. generate.heavy.parent.pom.groovy
          6 kB
          Andriy
        3. screenshot-maven-3.0.5.png
          790 kB
          Karl Heinz Marbaise
        4. screenshot-maven-3.3.9.png
          826 kB
          Karl Heinz Marbaise
        5. screenshot-maven-3.3.9-details.png
          808 kB
          Karl Heinz Marbaise

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            khmarbaise Karl Heinz Marbaise
            sandriy Andriy
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Issue deployment