2016-09-06 90 views
0

例如,在ArrayList中,每個項目都非常大,並且列表的大小可能會大到超過內存大小。在這種情況下擴大名單的策略是什麼?Java列表展開策略

感謝所有的答覆。我遇到過這樣的問題,即通過遠程調用來接收對象列表,並且列表中的每個對象可能相當大,而列表的大小可能是10000或更多。我想知道如何在執行過程中將這個列表存儲到內存中。

List<BigItem> list = queryService.queryForList(params...);

+2

每個項目都很大的事實與擴展ArrayList沒有太大的關係。當ArrayList變大時,它擴展了*引用*的數組,所以它總是以相同數量的內存擴展,而不管元素是什麼。佔用內存的是被添加到列表中的實際對象,並且如果您創建了其中的很多對象,則將它們放入列表或數組還是任何其他集合都無關緊要。所以請更詳細地解釋你的問題,因爲現在還不清楚你的問題是什麼。 – RealSkeptic

+1

你不擴大名單;你改變你的策略,不要一次把所有東西都放在記憶中。 – chrylis

回答

1

你提的問題是非常通用的,但我認爲這是可以給予一定的「以事實爲基礎」仍然回答:

如果你的設置是這樣的內存成爲瓶頸;那麼你的應用程序需要知道這個事實。換句話說:您需要在您的應用程序中實施測量

如果「增長」列表(以及例如「加載」那些昂貴的對象)是可能的,您必須使您的應用程序能夠做出決定。

描述了一個簡單的起點here;但當然,這確實是一件複雜的事情。您的代碼必須不斷監視其內存使用情況;並採取適當的措施,如果你接近你的極限。

或者,你應該分析真的理解你的應用程序的內存消耗「行爲」。在「自我控制」方面投入努力毫無意義......例如,如果您的應用程序碰巧存在各種內存泄漏。或者,如果您的代碼正在生成「垃圾」,垃圾收集器將不斷旋轉。

你看,很多方面在這裏發揮作用。你應該一個一個地關注他們。開始於瞭解您的申請;然後決定是否必須改進其「垃圾收集」行爲;或者如果你已經下了整整九碼,並讓你的應用程序自己管理!