我们使用 XStream 对 XML 进行序列化/反序列化……结果出现了OutOfMemory
异常。
首先,我不明白为什么我们会收到错误,因为我们有 500MB 分配给服务器。
问题是——我们应该做出哪些改变来避免麻烦?我们希望确保这种实施规模化。
目前我们有大约 60K 个对象,每个对象大约 50 个字节。我们将 60K POJO 加载到内存中,并将它们序列化为一个字符串,我们使用HttpClient
. 接收时,我们得到整个String,然后转换成POJO。XML/对象层次结构如下:
<root>
<meta>
<date>10/10/2009</date>
<type>abc</type>
</meta>
<data>
<field>x</field>
</data>
[thousands of <data>]
</root>
我认为最好的方法是不要将 POJO 存储在内存中,也不要将内容写入单个字符串。相反,我们应该将各个<data>
POJO 写入流。XStream支持这一点,但似乎<meta>
不支持该元素。数据需要采用以下形式:
<root>
<data>
<field>x</field>
</data>
[thousands of <data>]
</root>
那么什么方法最容易流式传输整个树呢?