J2ME中Form的内存泄露

本文探讨了在特定条件下Form对象无法被垃圾回收的问题,并提供了解决方案。通过移除CommandListener,即使Form未被回收,也能避免内存泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

 

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值