UIWebView泄漏,JS垃圾回收器和WebCore虚拟机

21

我一直在为一个应用程序构建浏览器功能,它显然与UIWebView配合使用。当浏览器打开时,我看到内存升高了,这是有道理的,但是在泄漏分析期间,我看到了一些令人不安的结果:

泄漏分析

随着我浏览的越来越多,“VM:JS垃圾收集器”和“VM:WebCore可净化数据”就不断上升。更糟糕的是,当浏览器被释放并且它的web view被释放时,这些对象仍然存在,占用高达6 MB的内存。

我不确定是否正确处理了UIWebView,但似乎在释放UIWebView后保持该内存存在问题。

我在浏览器被释放之前执行了一些清理操作,如此文章中所述http://www.codercowboy.com/code-uiwebview-memory-leak-prevention/ 但是这似乎没有任何区别。

有人遇到过这个问题吗?任何见解都将是很棒的。我已经看到了一些与UIWebView内存问题相关的问题,但它们没有具体详细地描述分析结果。


我也遇到了同样的问题,iOS 7.1也有此现象。这里有一个非常简单的示例项目:https://bitbucket.org/tassinari/mtwebviewtest 我还提交了一个错误报告http://www.openradar.me/radar?id=5869182600085504 - tassinari
1个回答

1

我不确定我会立即将此视为问题。这些虚拟机只有在您将Web视图添加到您的视图层次结构并加载请求时才会启动。

这可能只是操作系统保持这些资源处于活动状态,以防它们再次被使用。

我尝试复制清除数据的代码,结果下降了50%。

JS垃圾收集器始终最小为约3MB,但最大可达8MB WebCore可清除数据始终在700KB左右

您还应考虑,这可能与糟糕的JavaScript有关,因为JavaScript代码存在泄漏而继续存在。


3
如果用户继续交互时,内存使用量不断攀升且无法停止的任何情况,我认为都是相当严重的问题。在移动设备领域,3 MB 的内存使用量已经相当大了,尤其是当它实际上没有做任何事情的时候。如果有方法可以处理掉这些内存,我想要尝试一下。 - Aron
我在模拟器中尝试了其他方法,在dealloc网页视图后发送内存警告。它将两个虚拟机中的总内存减少到2.1MB。由于我们正在讨论Web资源,如果它开始占用过多内存,我不确定是否有一种方式来减少内存使用。我们没有像本地资源那样的内存管理选项。 - David Carvalho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接