Хорошо. Я только что нашел решение.
отсюда http://java.sun.com/developer/technicalArticles/ALT/sockets/:
Подводный камень сериализации объектов
При работе с сериализацией объектов важно помнить, что ObjectOutputStream поддерживает хеш-таблицу, отображающую объекты, записанные в поток, в дескриптор. Когда объект записывается в поток в первый раз, его содержимое будет скопировано в поток. Последующие записи, однако, приводят к дескриптору объекта, записываемого в поток. Это может привести к нескольким проблемам:
Если объект записывается в поток, а затем изменяется и записывается во второй раз, изменения не будут замечены при десериализации потока. Опять же, причина в том, что последующая запись приводит к записи дескриптора, но измененный объект не копируется в поток. Чтобы решить эту проблему, вызовите метод ObjectOutputStream.reset, который отбрасывает память об отправке объекта, поэтому последующие записи копируют объект в поток.
OutOfMemoryError может быть выдан после записи большого количества объектов в ObjectOutputStream. Причина этого заключается в том, что в хеш-таблице хранятся ссылки на объекты, которые в противном случае могли бы быть недоступны приложению. Эту проблему можно решить, просто вызвав метод ObjectOutputStream.reset для сброса таблицы объекта / дескриптора в ее начальное состояние. После этого вызова все ранее написанные объекты будут иметь право на сборку мусора.
Метод сброса сбрасывает состояние потока так, как если бы оно было только что создано. Этот метод не может быть вызван во время сериализации объектов. Неправильные вызовы этого метода приводят к IOException.