I use the file system to store the emails.
When I run the James for a long time, the james server used more and more heap memory, eventually it runs out of memory and refuse to receive email. only restart the james will work.
I used JProfile Memory Debugger(you can get the trial version from www.quest.com) and found a clue. the object allocated from following code at line 92 does not always get released, cause the memory been used up eventually. I will attach a picture file showing the call stack.
91, final OutputStream outputStream = getOutputStream( key );
92, final BufferedOutputStream stream = new BufferedOutputStream( outputStream );
94, final Object o = m_outputs.get( key );
95, if( null == o )
99, else if( o instanceof ArrayList )
111, return stream;