[ 
http://issues.apache.org/jira/browse/JAMES-512?page=comments#action_12413647 ] 

Quande Ren commented on JAMES-512:
----------------------------------

the code "if (stream != null) stream.close()"  is already presented at line 287 
in the AvalonMailRepository.java. So I don't think this is the reason for 
OutOfMemoryError.

For the code final BufferedOutputStream stream = new BufferedOutputStream( 
outputStream ); , it will allocate a buffer(byte[8192]), and this stream will 
be stored in a hashtable (line 97, or 101, or 108.). but when did this stream 
get removed from the hashtable?  If it nener get removed from the hashtable, 
then this is the place where it causes the OutOfMemoryError.




> 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
>     Assignee: Stefano Bagnara
>     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;

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to