The change you suggested seems logic to me. bye Norman
Am Dienstag, den 30.05.2006, 17:07 +0000 schrieb Bernd Fondermann (JIRA): > [ > http://issues.apache.org/jira/browse/JAMES-512?page=comments#action_12413858 > ] > > Bernd Fondermann commented on JAMES-512: > ---------------------------------------- > > shouldn't this > > for( int i = 0; i < size; i++ ) > { > IOUtil.shutdownStream( (OutputStream)list.get( 0 ) ); > } > > be > > for( int i = 0; i < size; i++ ) > { > IOUtil.shutdownStream( (OutputStream)list.get( i ) ); > } > > seems like this is not closing stream 1..(size-1)! > > > > > OutOfMemoryError -- object not released. > > ---------------------------------------- > > > > Key: JAMES-512 > > URL: http://issues.apache.org/jira/browse/JAMES-512 > > Project: James > > Type: Bug > > > Components: MailStore & MailRepository > > Versions: 2.2.0 > > Environment: windows XP, > > Java 1.5.0_06 > > Reporter: Quande Ren > > Priority: Critical > > Fix For: 2.3.0a4 > > Attachments: picture.GIF > > > > 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 ); > > 93 > > 94, final Object o = m_outputs.get( key ); > > 95, if( null == o ) > > 96, { > > 97, m_outputs.put( key; stream ); > > 98, } > > 99, else if( o instanceof ArrayList ) > > 100, { > > 101, ( (ArrayList)o ).add( stream ); > > 102, } > > 103, else > > 104, { > > 105, final ArrayList list = new ArrayList(); > > 106, list.add( o ); > > 107, list.add( stream ); > > 108, m_outputs.put( key; list ); > > 109, } > > 110 > > 111, return stream; >
signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil