Knut Anders Hatlen wrote:
[EMAIL PROTECTED] writes:

Author: oysteing
Date: Fri Mar  7 05:06:08 2008
New Revision: 634658

URL: http://svn.apache.org/viewvc?rev=634658&view=rev
Log:
DERBY-3358: OOME at slave during replication

Isn't this DERBY-3497?

Oops.  I will fix that.


     public void writeMessage(Object message) throws IOException {
+        // reset stream so that previously shipped objects can be gc'ed
+        objOutputStream.reset();
         objOutputStream.writeObject(message);
         //flush the stream to ensure that all the data that is part
         //of the message object is written and no data remains

Wouldn't it be better to call reset after writeObject() (and before
flush())? That would allow both the sender and the receiver to reclaim
the memory earlier.


I guess the way this stream works, we might as well call reset right away. As far as I understand, before reset is called, when writing more objects to the stream that have references to objects already written to the stream since last call to reset, it will not lead to those objects being serialized again. Since each replication message will be independent of earlier messages, there is no need for sharing objects and the stream could be reset right away.

A possible alternative, if I interpret the javadoc for ObjectOutputStream correctly, would be to use writeUnshared instead of writeObject. Since the written object will not be shared, maybe calling reset would not be necessary in that case.

--
Øystein

Reply via email to