ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

在Android中使用SAX解析器-内存不足问题

2019-10-24 06:25:48  阅读:194  来源: 互联网

标签:out-of-memory sax parsing android


我一直在使用SAX解析器一段时间,以从各种XML中获取数据,但是今天,我开始着迷于一个新的问题,即一个复杂的XML(与之前的大约12,000行相比).重复项.大多数时候,这些项目是一个块的一部分:

  <content>

  <item lbl="blabla">
    <item lbl="blabla"/>
    <item lbl="blabla"/>
  </item>

  <item lbl="blabla">
    <item lbl="blabla"/>
    <item lbl="blabla"/>
    <item lbl="blabla"/>
    <item lbl="blabla"/>
    <item lbl="blabla"/>
    <item lbl="blabla"/>
  </item>
</content>

blabla部分当然会发生变化…但是,我想保留项目的结构(它们是标题和字幕).为此,我在每个blabla后面附加了一个开始和结束标签< itemx> blabla< / itemx&gt ;,其中x是项目树中的位置(1、2、3或4).
稍微有问题的部分是,这样,我正在创建数千个无用的对象,并且在解析器之后,垃圾收集器没有时间进行清理,不可避免的出现了OutOfMemory …
我不知道该如何处理.最好的技术是可以获取< content>< / content>的全部内容,但是我不确定使用SAX解析器是否可能.

欢迎任何帮助,并深表感谢任何解决方案…

解决方法:

在大多数情况下,您不能“创建足够快的对象以至于GC无法跟上进度”.实际上,当需要进行GC时,您的整个应用将被暂停,直到完成为止,因此您无法超越它.

唯一的例外是位图,这些位图经过特殊处理-即使不对其进行分配,它们也计入Java堆.这样做很好,除了Bitmap的内存在其终结器运行之前不会被释放,并且终结器确实与收集的垃圾分开运行并且不阻止应用程序.因此,创建一堆位图并简单地放开它们(不调用显式释放位图内存的方法)确实会导致内存不足异常.

但是,如果您不分配(放开)位图对象,则可能会遇到其他问题,可能只是…没有足够的内存来分配所有分配.您可以使用帽子工具(在较小程度上是DDMS中的简单Java堆信息)来查看分配给您的东西占用了太多的空间.

标签:out-of-memory,sax,parsing,android
来源: https://codeday.me/bug/20191024/1918540.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有