• K
    Fixed PermGen OutOfMemoryError during full clean build. · 2f9dff73
    Kohsuke Kawaguchi 提交于
    Plexus compiler 1.8.6 that maven-compiler-plugin 2.4 has a static field
    to store a reference to the Javac class in tools.jar
    
    In JDK that I use (6u26), Javac has a static field that stores what
    appears to be a cache of jar files (ZipFileIndex.zipFileIndexCache).
    And in addition, Maven instantiates a separate ClassRealm to host plugin
    jar files when a project has any build extensions.
    
    The combined result is that during a build, we end up having multiple
    copies of URLClassLoader that loads tools.jar, and each ends up caching
    jar files it was used. This puts a pressure to permgen (although I
    couldn't pinpoint which portions of those caches use permgen), resulting
    in OOME.
    
    In Plexus compiler 1.9, Olivier added a new feature to control the
    caching/reuse of Javac compiler. While this apparently was done
    primarily for fixing concurrency issues in multi-threaded builds, it is
    also a useful mechanism to prevent the retention of Javac classes.
    
    So I pushed the SNAPSHOT version of maven-compiler-plugin as
    2.5-jenkins-1 and tweaking POM to use it.
    2f9dff73
pom.xml 26.9 KB