Apps相关内存泄漏易发生点

本文探讨了APPs中常见的内存泄漏问题,包括接口引用InterfacedPersistent对象导致的泄漏、TList的GetEnumerator未释放引发的问题及Element.getChildren方法创建的List未释放的情况。提出了通过添加asObject方法来解决这些问题的方法。

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

Apps相关内存泄漏易发生点:
成因:
1、用接口引用InterfacedPersistent对象后,接口引用失去时只减少引用计数,并不会在引用计数为零时释放对象本身(InterfacedObject则会自动释放),APPS中有大量这种用接口引用InterfacedPersistent的应用,故泄漏基本都上出自这方面。解决方法有二:一是,不使用接口获取对象引用,直接使用抽象基类获取(影响整体框架不考虑);二是,对接口或者实现类添加自定义的IAsObject接口,实现asObject方法,返回对象本身,再进行释放。
2、TList的GetEnumerator问题,其内部实现是Create一个TlistEnumerator的,获取后需手动释放,在ddom中存在没释放的问题,另外调用了ddom中的.iterator()方法也实际上是调用GetEnumerator,用后注意释放。
3、Element.getChildren会Create一个List,使用完后要手工释放。只获到子节点数的话,可用getContentSize()
 
具体细节:
1、Logger接口实现类由于继承于InterfacedPersistent,对象失去接口引用时,只会减少引用计数,引用计数为0时并不会自动释放Logger所引用对象,需设法获取对象本身(如添加asObject方法返回对象本身)。现用单例模式处理并不需要频繁释放。
2、Servlet释放问题,原因同上,已对Servlet添加asObject,在HTTPHandler添加了释放代码
3、DOMOutputter也是同样问题,由于ddomrtl为公用模块,为保证兼容性,DOMOututter添加asObject方法,获取对象本身后手动释放。
4、HTTPHandler问题同上。。。解决方法也是用asObject手动释放算了。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值