由於在事務過程中構建了一些非常大的列表和集合,並且在事務結束時迭代了一次,因此我在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. IOS寫入到磁盤上的後臺線程
- 2. 移動TFS的項目集合到另一個磁盤
- 3. 核心數據:在後臺寫入批量記錄到磁盤
- 4. Java溢出到磁盤的FIFO隊列
- 5. 從磁盤在一個讀離散集合頁轉到
- 6. 組合框移動資源到磁盤
- 7. Redis磁盤大小巧合?
- 8. 寫入後中止緩衝到磁盤?
- 9. RMAN將磁帶備份集恢復到磁盤
- 10. 寫CFArray到磁盤
- 11. 後臺線程鎖UI中的重磁盤I/O
- 12. java mysql磁盤已滿
- 13. Java ehcache磁盤存儲
- 14. arangodb中按集合的奇怪磁盤空間利用率
- 15. 的iOS得到磁盤
- 16. Redshift中的磁盤空間和羣集
- 17. Java控制檯日誌沒有通過Applet寫入磁盤
- 18. 保存與列表列的磁盤到磁盤
- 19. 將大型數據集PCA保存在磁盤上供以後與有限的磁盤空間一起使用
- 20. Java集合映射到集
- 21. 監控Java中的磁盤活動
- 22. 磁盤上的Java目錄大小?
- 23. B +在Java中的磁盤實現
- 24. 拍攝屏幕的Java磁盤速度
- 25. Java集合到JSON
- 26. 將對象集合保存到磁盤Windows 10通用應用程序
- 27. 主磁盤與交換磁盤
- 28. 鏈接到本地磁盤
- 29. Python找到設備磁盤
- 30. 將trie保存到磁盤
不完全是你可能要搜索的東西,看看Hadoop http://hadoop.apache.org/ – saugata 2010-03-10 05:14:51
是否有一個原因,你沒有使用標準的RDBMS呢?從某種角度來看,這是你所問的內容的定義。即使是輕量級的,如h2db,sqlite也可以勝任大多數任務。 – dpb 2010-03-10 05:51:19