OutOfMemoryError using findbugs & continuum – and how to fix it.
When using findbugs through the findbugs maven plugin, one is very likely to see the maven build in continuum fail with an OutOfMemory-Exception like this:
java.lang.OutOfMemoryError: Java heap space
at java.util.ArrayList.<init>(ArrayList.java:112)
at edu.umd.cs.findbugs.ba.Frame.<init>(Frame.java:111)
at edu.umd.cs.findbugs.ba.vna.ValueNumberFrame.<init>(ValueNumberFrame.java:55)
at edu.umd.cs.findbugs.ba.vna.ValueNumberAnalysis.createFact(ValueNumberAnalysis.java:131)
at edu.umd.cs.findbugs.ba.vna.ValueNumberAnalysis.createFact(ValueNumberAnalysis.java:56)
at edu.umd.cs.findbugs.ba.BasicAbstractDataflowAnalysis.lookupOrCreateFact(BasicAbstractDataflowAnalysis.java:171)
at edu.umd.cs.findbugs.ba.BasicAbstractDataflowAnalysis.getResultFact(BasicAbstractDataflowAnalysis.java:73)
at edu.umd.cs.findbugs.ba.Dataflow.<init>(Dataflow.java:78)
at edu.umd.cs.findbugs.ba.AbstractDataflow.<init>(AbstractDataflow.java:42)
at edu.umd.cs.findbugs.ba.vna.ValueNumberDataflow.<init>(ValueNumberDataflow.java:34)
at edu.umd.cs.findbugs.ba.ClassContext$3.analyze(ClassContext.java:611)
at edu.umd.cs.findbugs.ba.ClassContext$3.analyze(ClassContext.java:599)
at edu.umd.cs.findbugs.ba.ClassContext$AnalysisFactory.getAnalysis(ClassContext.java:266)
at edu.umd.cs.findbugs.ba.ClassContext.getValueNumberDataflow(ClassContext.java:1376)
at edu.umd.cs.findbugs.detect.BuildUnconditionalParamDerefDatabase.analyzeMethod(BuildUnconditionalParamDerefDatabase.java:96)
at edu.umd.cs.findbugs.detect.BuildUnconditionalParamDerefDatabase.considerMethod(BuildUnconditionalParamDerefDatabase.java:85)
at edu.umd.cs.findbugs.detect.BuildUnconditionalParamDerefDatabase.visitClassContext(BuildUnconditionalParamDerefDatabase.java:71)
at edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(DetectorToDetector2Adapter.java:64)
at edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:658)
at edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:185)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.groovy.runtime.metaclass.ReflectionMetaMethod.invoke(ReflectionMetaMethod.java:52)
at org.codehaus.groovy.runtime.MetaClassHelper.doMethodInvoke(MetaClassHelper.java:714)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:583)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:476)
at org.codehaus.groovy.runtime.Invoker.invokePogoMethod(Invoker.java:115)
at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:81)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:85)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:158)
This is not because continuum lacks memory, but because maven does – and running findbugs is a quite resource-hungry undertaking.
The following addition to the “mvn” executable (residing in your maven’s “bin” folder) should do (tested in the 2.0.8 release):
MAVEN_OPTS="-Xmx1024m -Xms128m -XX:MaxPermSize=512m".
I must admit that -Xmx1024m is rather generous, though. 256m or 512m might do for many cases, too.
This entry was posted on Monday, April 21st, 2008 at 01:04. Posted in: continuum, java, maven 2. You can follow any responses to this entry through the RSS 2.0feed. You can leave a response, or trackback from your own site.

The findbugs link needs a fix
Thanks! Fixed it.