From 2f9dff73c67c8ea68b2af46eb261fd5a3ee7e7e2 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Thu, 24 May 2012 10:27:57 -0700 Subject: [PATCH] Fixed PermGen OutOfMemoryError during full clean build. 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. --- pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 958d82d06f..aa76ca97aa 100644 --- a/pom.xml +++ b/pom.xml @@ -553,10 +553,11 @@ THE SOFTWARE. maven-compiler-plugin - 2.4 + 2.5-jenkins-1 1.5 1.5 + alwaysNew