3

尝试在 Android 上使用 Jsoup 连接到某些站点,它会引发 java.lang.OutOfMemoryError 异常。例子:

Jsoup.connect("http://www.xbox360achievements.org/game/grand-theft-auto-iv/guide/").get();

可以做些什么来避免这个问题?

Jsoup 1.7.1

4

2 回答 2

1

OutOfMemoryError 意味着您的应用程序使用的内存超出了它的可用内存。(呃!)

您的选择是:

  • 增加允许应用程序使用的内存量。

  • 减少应用程序使用的内存量。例如:

    • 在使用 jsoup 解析之前不要读取和缓冲整个文档。

    • 确保您没有在内存中保留太多正在抓取的页面的信息。要么将其写入文件系统,要么即时“减少”它。

    • 分析应用程序的内存使用情况,以查找泄漏和其他内存使用过多的问题。

于 2012-12-19T23:27:18.497 回答
0

似乎 get 方法将所有内容都存储在内存中,因此当您加载大型内容时,您会得到 OOME

从我可以看到你的选择是:

  1. 加载一个较小的文档,您尝试加载的文档似乎很大。内存非常重要,尤其是在手持设备上
  2. 以块的形式预处理文档并一次处理一个,这样您就不会使用太多的内存
  3. 在内存更大的环境中运行程序
  4. 弄清楚 Jsoup 是否可以做缓冲 IO,如果不能使用不同的库或编写自己的库。使用缓冲 IO,您一次只能读取和处理数据块,因此您不会使用太多内存空间
于 2012-12-19T23:23:20.733 回答