现在的位置: 首页 > 综合 > 正文

J2ME中Form的内存泄露

2013年07月18日 ⁄ 综合 ⁄ 共 958字 ⁄ 字号 评论关闭

改别人代码是件很痛苦的事情,但是工作中在所难免。今天碰到了很棘手的问题——有一个类的对象无论如何不能被回收,当然这是在排查了半天内存溢出之后得出的结论。

还好模拟器忠实的反映了这个问题——假设创建了一个包含两个TextField的Form之后,那么这个Form将永远存在,哪怕没有任何引用,好在只会存在一个。问题的根由就是把那个包含很多资源的类作为那个Form的CommandListener之后,因为Form不会被回收,当然那个类就不会被回收了。从网上搜索的结果来看,有些人已经发现了CommandListener不能回收的问题,但是却没有想到是Form不能回收的问题——放两个TextField会不能回收,但是放一个就可能能回收(有时也不能),放StringItem能回收。下面是一个简单的测试程序,从WTK的内存对象监视器能看到结果:

 

 

问题的解决就是绕开这个回收问题,显式的将那个Form的CommandListener置空,虽然那个Form不会被回收,好在消耗的内存并不多。

 

抱歉!评论已关闭.