【发布时间】:2013-03-06 22:25:56
【问题描述】:
我创建了一个带有两个线程的客户端/服务器对来发送和接收对象,虽然它一开始运行良好,但运行一段时间后我遇到了 OutofMemory 错误,我正在研究垃圾收集器的工作原理在 Android 2.3.4 中,似乎有些对象由 ObjectInputStream 和 ObjectOutputStream 保留,不会被 GC 收集。我使用Eclipse中的内存分析工具找出内存泄漏的位置,发现有一个IdentityHashMap对象,它保存着对正在发送和接收的数据的引用。我想找到解决此问题的方法,如何释放此数据或如何删除此对象保留在我的数据上以防止其被收集的引用。我正在使用的内存堆对于 64M 的手机来说非常大,如果我尝试对大块数据进行相同操作,只要我不运行很长时间,它就可以正常工作。
【问题讨论】:
-
序列化/反序列化代码可能使用 IdentityHashMap 来保持对已处理对象的引用,以防止由于循环引用而导致的无限循环。除非您发布一些代码,否则我认为您的问题无法回答。
-
IdentityHashMap 是 ObjectOutputStream 的一部分,不能给你代码,也不能改变它的工作方式。
标签: android garbage-collection out-of-memory