 <blockquote> <p>Audiogram is a constructor and seriesColors are not used apart from this method</p> </blockquote> <p>Assuming that your statement is accurate, and assuming that you posted the entire constructor, the <code>seriesColors</code> attribute (static or not) serves no useful purpose whatsoever. </p> <p>If this is the case, the then fix for the memory leak is to simply <strong>remove</strong> the <code>seriesColors</code> declaration from your code, as follows:</p> <pre><code>// static private ArrayList seriesColors = new ArrayList(); &lt;&lt;&lt;=== remove this line public Audiogram(int widthParm, int heightParm) throws Exception { super(widthParm, heightParm); // seriesColors.add(new Color(0, 0, 255)); &lt;&lt;&lt;=== remove this line // Set the default settings to an industrial audiogram setType(INDUSTRIAL_AUDIOGRAM); } </code></pre> <p>However, I suspect that this is not the whole story ...</p> <p><strong>EDIT</strong></p> <p>Comment out those two lines as indicated. If the code compiles with those two lines commented out, then they are definitely redundant.</p> <p>However, it strikes me that your knowledge of Java must be close to zero. If this is the case, you should NOT be trying to clean up memory leaks and the like in other peoples' code. Learn some Java first.</p>