我一直在使用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> ;,其中x是项目树中的位置(1、2、3或4).
稍微有问题的部分是,这样,我正在创建数千个无用的对象,并且在解析器之后,垃圾收集器没有时间进行清理,不可避免的出现了OutOfMemory …
我不知道该如何处理.最好的技术是可以获取< content>< / content>的全部内容,但是我不确定使用SAX解析器是否可能.
欢迎任何帮助,并深表感谢任何解决方案…
解决方法:
在大多数情况下,您不能“创建足够快的对象以至于GC无法跟上进度”.实际上,当需要进行GC时,您的整个应用将被暂停,直到完成为止,因此您无法超越它.
唯一的例外是位图,这些位图经过特殊处理-即使不对其进行分配,它们也计入Java堆.这样做很好,除了Bitmap的内存在其终结器运行之前不会被释放,并且终结器确实与收集的垃圾分开运行并且不阻止应用程序.因此,创建一堆位图并简单地放开它们(不调用显式释放位图内存的方法)确实会导致内存不足异常.
但是,如果您不分配(放开)位图对象,则可能会遇到其他问题,可能只是…没有足够的内存来分配所有分配.您可以使用帽子工具(在较小程度上是DDMS中的简单Java堆信息)来查看分配给您的东西占用了太多的空间.
总结以上是内存溢出为你收集整理的在Android中使用SAX解析器-内存不足问题全部内容,希望文章能够帮你解决在Android中使用SAX解析器-内存不足问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)