java.lang.OutOfMemoryError
at com.solvoterra.xmlengine.Element.<init>(Element.java:9)
at com.solvoterra.xmlengine.XML_Handler_Main.startElement(XML_Handler_Main.java:71)
at org.apache.harmony.xml.ExpatParser.startElement(ExpatParser.java:146)
at org.apache.harmony.xml.ExpatParser.append(Native Method)
at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:505)
at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:492)
at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:308)
at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:264)
at com.solvoterra.xmlengine.Project_Man.readXML_File(Project_Man.java:148)
at com.solvoterra.xmlengine.Project_Man.run(Project_Man.java:83)
at java.lang.Thread.run(Thread.java:1102)我可以从这里看到错误发生时,运行一个新的进程,其中只包含SAX解析到内存(RAM)的功能,我不知道所有的细节,因为这个信息是由市场上的匿名用户提供的。
在调用Parse函数之前,将清除所有缓冲区和内存中的现有数据。
问:有没有可能用户试图将一个巨大的XML数据库解析到内存中,而他的手机分配的RAM根本不足以处理他的数据库?
发布于 2010-12-29 22:19:27
Sax解析方法不会将内容加载到内存本身(与DOM相反)。只有您处理SAX生成的事件的方式才会导致内存过载。
如果您允许用户自由选择XML源,则必须执行以下任一操作:
出现这种OutOfMemoryError的另一个原因可能是应用程序中的内存泄漏,这与您的XML解析器无关。例如,方向更改,如果不小心处理,很容易导致内存泄漏。如果您的应用程序内存饱和,则任何内存分配都可以触发OutOfMemoryError,但这种单一的内存分配可能不会导致整个进程的内存饱和。
发布于 2010-12-29 22:22:50
内存不足是很容易发生的(我的意思是如果将XML文件放在RAM中)。SAX Parser是一种基于流的解析方法(与DOM Parser相反)。因此,SAX本身不能消耗大量内存。最好的方法是将XML保存到外部文件/存储,并将文件中的流数据直接保存到SAX解析器。这种方法正是应该使用SAX解析器的方式。
https://stackoverflow.com/questions/4554735
复制相似问题