2013-02-13 77 views
0

我正在使用Spring,Hibernate,Java 1.6等。 我有一個複雜的邏輯,其中包含多個Arralist和在方法中創建的地圖。 將數據從數據庫加載到列表中,然後進行操作以獲取jsp頁面的數據。 如果同一動作在該頁面中快速執行並多次執行,則會頻繁觸發該動作。由於大量數據在列表和映射中處理,應用程序會拋出Java堆OutOfMemory。從Java OutOfMemory異常中恢復

如果我應用-Xms -Xmx,那麼它在一定程度上會有所幫助,如果我的數據增長了這個選項將會鬆動到內存問題。 我想知道,有什麼方法可以在我們操作並將它們傳遞給Model for jsp頁面之後清除列表。

+3

'OutOfMemory'錯誤,不是例外,無法恢復。 – 2013-02-13 06:25:50

+0

爲什麼不嘗試將數據處理成塊? – Abubakkar 2013-02-13 06:30:28

+0

歡迎來到大數據的世界。試試像Hadoop,HBase或其他一些不太複雜的批處理解決方案,如Spring批處理。 – Prateek 2013-02-13 07:12:46

回答

0

嘗試使用SoftReferences來處理內存中需要的大量資源。

組織緩存以從內存中釋放不必要的內容。例如ehCache

0

你不能從OOM中恢復,因爲你永遠不知道它會在何時何地擊中你。

嘗試使用像google番石榴一樣的懶惰集合來操縱數據而不創建額外的副本。使用遊標和迭代器來避免存儲在內存中的完整數據。

0

嘗試使用分佈式內存緩存解決方案,如-ehcache,Memcached,oracle一致性。