由於在事務過程中構建了一些非常大的列表和集合,並且在事務結束時迭代了一次,因此我在Java中的內存不足。是否有任何庫提供Java集合,當集合大小超過給定閾值時,它們可以將可序列化的內容緩存到磁盤?後臺到磁盤的Java集合
10
A
回答
4
你可以嘗試像ehcache及其overflowToDisk選項
+0
據我所知,Ehcache沒有從緩存中輪詢(獲取+刪除)元素的邏輯,根據文檔我只看到#get()方法。 也許你知道我該如何使用ehcache實現這樣的功能? – MeetJoeBlack 2017-09-07 13:07:48
4
我不會發布你的示例代碼,因爲它會變得太長,但是這是我以前做過:
- 擴展
LinkedBlockingQueue
。 - 優先考慮它的
offer
,put
,poll
,take
和remove
方法。 示例:如果父類'offer
返回false(達到容量),然後我會開始序列化到磁盤。 - 同樣,在
take
的實現中,您檢查內存中是否存在任何當前元素,如果不存在,則開始從磁盤讀取數據(並刪除第一條記錄,因爲它現在駐留在內存中;或者當然也可以分批讀取記錄)。 - 將這樣一個隊列的每個實例分配一個文件系統安全標識符,以便我可以使用它爲它創建文件系統安全的文件名。另外,爲了更進一步,我可能會使用當前用戶的主目錄作爲這些隊列被串行化到磁盤上的位置。
通過這種方式,99%的磁盤序列化隊列已準備就緒,您只需將您的額外功能放在恰當的位置即可。你需要仔細閱讀Java的BlockingQueue
接口的文檔,但是,值得你花時間,因爲你只會添加你需要的額外少許功能,而不是從頭開始編寫整個東西。
希望這會有所幫助。
相關問題
- 1. Java溢出到磁盤的FIFO隊列
- 2. RMAN將磁帶備份集恢復到磁盤
- 3. 寫CFArray到磁盤
- 4. java mysql磁盤已滿
- 5. Java ehcache磁盤存儲
- 6. arangodb中按集合的奇怪磁盤空間利用率
- 7. 的iOS得到磁盤
- 8. 保存與列表列的磁盤到磁盤
- 9. 將大型數據集PCA保存在磁盤上供以後與有限的磁盤空間一起使用
- 10. B +在Java中的磁盤實現
- 11. 拍攝屏幕的Java磁盤速度
- 12. 鏈接到本地磁盤
- 13. 將DynamicMethod保存到磁盤
- 14. Mongoengine FileField保存到磁盤?
- 15. vb.net導出到磁盤
- 16. 瓶 - 等到磁盤安裝
- 17. 從存儲器到磁盤
- 18. 將NSMutableArray保存到磁盤
- 19. 將trie保存到磁盤
- 20. Python找到設備磁盤
- 21. 將nsdate保存到磁盤
- 22. 主磁盤與交換磁盤
- 23. 紅移集羣備份磁盤空間
- 24. 羣集共享磁盤出現故障
- 25. UIImagePickerController保存到磁盤然後加載到UIImageView
- 26. 的System.OutOfMemoryException從磁盤
- 27. Java基準測試磁盤速度
- 28. Java Array大容量刷新磁盤
- 29. 當RAM用完時寫入磁盤java
- 30. 如何將圖像存儲到Java中的磁盤?
不完全是你可能要搜索的東西,看看Hadoop http://hadoop.apache.org/ – saugata 2010-03-10 05:14:51
是否有一個原因,你沒有使用標準的RDBMS呢?從某種角度來看,這是你所問的內容的定義。即使是輕量級的,如h2db,sqlite也可以勝任大多數任務。 – dpb 2010-03-10 05:51:19