在我的程序中,我正在從磁盤讀取一系列文本文件。對於每個文本文件,我會處理掉一些數據並將結果作爲JSON存儲在磁盤上。在這個設計中,每個文件都有自己的JSON文件。除此之外,我還將一些數據存儲在單獨的JSON文件中,該文件存儲來自多個文件的相關數據。我的問題是共享JSON隨着每個文件的解析而變得越來越大,並最終使用了太多的內存。我在32位機器上,擁有4 GB的RAM,並且無法再增加Java VM的內存大小。我的JSON文件太大而無法放入內存,我該怎麼辦?
要考慮的另一個約束是我經常回頭引用舊的JSON。例如,說我從FileY中取出ObjX。在僞代碼,將出現以下情況(使用傑克遜JSON序列化/反序列化):
// In the main method.
FileYJSON = parse(FileY);
ObjX = FileYJSON.get(some_key);
sharedJSON.add(ObjX);
// In sharedJSON object
List objList;
function add(obj)
if (!objList.contains(obj))
objList.add(obj);
我能想到做的唯一事情是使用流JSON,但問題是,我經常需要訪問的JSON之前來過,所以我不知道那個流會起作用。此外,我的數據類型不僅是字符串,這阻止了我使用Jackson的流媒體功能(我相信)。有誰知道一個好的解決方案?
也許是時候重新考慮你的數據結構了。尋找更好的設計(更模塊化)可以減輕機器的需求。 – SJuan76 2012-07-10 21:45:12
獲取更多內存或更小的文件。 – duffymo 2012-07-10 22:15:22
如果你將所有的數據儲存在內存中,那麼流式傳輸只會給你多一點時間。找到方法來拋棄你不再需要的東西。 – phatfingers 2012-07-10 22:48:51