2014-01-31 36 views
0

我正在開發基於搜索的Java EE應用程序,它與其中的任何搜索引擎一樣非常簡單,一個頁面允許用戶搜索內容和分頁以移至下一組結果,現在我想提供導出文本文件中的數據的功能,但問題是,當有非常大的數據要導出時,它會消耗大約100MB的JVM內存。在JAVA EE應用程序中導出大量數據

Java EE高手請指教?

我看here但對我來說並不

+4

請發佈您的代碼,您可能需要使用'OutputStream'並傳輸內容。 –

+0

目前使用ArrayList完成,此列表包含所有數據。 – malatesh

回答

3

你最有可能節省一些集合類的整個數據,然後將其序列化到一個文本文件中沒什麼太大的幫助。正如你已經注意到的那樣 - 可能適用於少量數據,但是當數據量太大時,你的應用程序就會癱瘓。在這種情況下,這不是一個好的方法,因爲你永遠不會返回多少數據。

您應該將查詢結果流式傳輸到輸出,即將每個查詢結果寫入aftre中以獲取它,而不需要暫時保存它。您可以使用任何OutputStream實現。如果您從servlet發送文件,則可能需要在設置正確的內容類型後直接寫入servlet的輸出流。

+1

感謝您的回答 – malatesh

0

每個會話100 MB是可以承受的,同時用戶很少。因此,您可以限制併發導出操作的數量,以確保您不會耗盡內存;

有很多方法可以做到這一點,其中包括有限的Session EJB實例池(其他請求自動等待),相關類的靜態變量中的計數器,數據庫表(可以作爲過去的日誌導出操作),可能監視可用內存。

+0

感謝您的回答 – malatesh