2012-12-19 38 views
3

試圖連接到Android上的一些網站有Jsoup,它拋出java.lang.OutOfMemoryError異常。 例如:的OutOfMemoryError在Jsoup.connect()。get()方法

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

可以做些什麼來避免這個問題?

Jsoup 1.7.1

+0

在HTML整個頁面〜200KB。不要以爲這是太多了。你可以發佈你的Java內存設置? – mishadoff

+0

DVM有16MB堆大小。不是所有的設備,但最低限度。 –

回答

0

看來get方法存儲在內存中的一切,因此,當你加載一個大型的內容你OOME

從我可以看到你的選擇是:

  1. 負載小的文件,你要加載的文件似乎是大了。內存尤其是在手持設備
  2. 預處理塊中的文件並處理它們一次一個溢價,所以你不使用盡可能多的內存
  3. 如果Jsoup與大內存的環境中運行您的程序
  4. 圖出來可以做緩衝IO,如果不使用不同的庫或自己寫。對於緩衝式IO,您只能一次讀取並處理數據塊,因此不會使用太多的內存空間。
1

OutOfMemoryError意味着您的應用程序使用的內存比可用的內存多。 (!咄)

的選項有:

  • 增加該應用程序允許使用的內存量。

  • 降低內存的應用程序不會使用量。例如:

    • 不要在用jsoup解析之前讀取和緩衝整個文檔。

    • 確保你不是從你抓取的網頁保存太多的信息在內存中。可以將它寫入文件系統,或者在運行中「減少」它。

    • 簡介應用程序的內存使用情況,以尋找泄漏和其它問題過多的內存使用。