Jsoup.connect()中的OutOfMemoryError.get()

时间:2012-12-19 23:09:18

标签: java android jsoup

尝试在Android上使用Jsoup连接到某些网站,并抛出java.lang.OutOfMemoryError异常。 例如:

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

可以采取哪些措施来避免这个问题?

Jsoup 1.7.1

2 个答案:

答案 0 :(得分:1)

OutOfMemoryError意味着您的应用程序使用的内存多于可用内存。 (咄!)

您的选择是:

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

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

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

    • 确保您没有从正在抓取的网页中保留太多内存信息。将其写入文件系统,或者“动态”减少它。

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

答案 1 :(得分:0)

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

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

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