我有一個內存問題,我完全瞭解原因,但不知道修復。我試圖使用-Xmx2g標記並使堆大小變大,但似乎存在隱藏的最大值。 (如果我使用了-Xmx512m,我同時用完了空間)。使用巨大的ArrayLists,Java OutOfMemoryError:Java堆空間...使用db?
假設我有2個對象,一個區域和一個用戶。我區對象保存用戶的ArrayList:
public class Area {
int numUsers;
ArrayList<User> userList;
}
我的User類持有的朋友一個ArrayList:
public class User {
int userID;
int numFriends;
ArrayList<User> friends;
}
只使用一個領域,有100萬個用戶,每一個平均的200個朋友用戶,在創建約680,000個用戶之後,我用完了堆空間。顯然,如果我將朋友/用戶的平均數量降低到接近100的數量,我可以將所有這些對象存儲在堆中。
如果我想模擬一個地區的200萬用戶該怎麼辦?還是數百個地區的?
有了這麼多的數據,數據庫是使用信息進行模擬的唯一可行的方法嗎?
是的,將這種大小的圖表擬合到單個虛擬機中將會變得侷促。不,除了關係數據庫之外,還有很多方法可以保存和處理大量數據。你的情況適合哪種方式取決於你想要對數據做什麼,以及你的性能要求是什麼。 Perpahs甚至可以根據需要創建數據,避免將其存儲在整個數據中? – meriton 2011-01-11 20:24:13
需要存儲它的全部內容最終會有多個區域,其中來自區域1的一些用戶可以有來自區域42的朋友。我認爲將它存儲在內存中不會成爲此時的選項。在這一點上,我只需要模擬這些信息。該項目需要一個真實的社交網絡模型。我應該研究你知道的任何結構嗎? – Eddie 2011-01-11 20:45:30
在內存中存儲可能會走得很遠。目前的內存價格爲100歐元/ 8GByte,大多數系統不應該是基於磁盤的。 – 2011-01-11 22:20:27