C++和java中hashmap/map對象的最大大小是多少?我想使用hashmap,但我正在處理大量數據。我擔心如果我在大數據上使用它,它可能會因爲容量限制而崩潰。是這樣嗎?如果是這樣,可以採取什麼替代方法?C++和java中地圖對象的最大尺寸是多少?
回答
在C++中,std::map
有一個max_size()
成員函數(對應於它可容納的數據量)。
sizeof(std::map<...>)
會給你實際對象的大小(對應於實際對象的大小,而不是它所保存的數據)。
......但「實際對象的大小」並不代表什麼;這對於實際的內存使用來說是一個非常小的下限,只能由分配器使用。 – 2011-12-20 18:00:07
這些表達式都不會報告整個地圖使用的實際內存。 – 2011-12-20 18:00:35
@德魯,不,但是第一個人正好回答了OP的要求。 – 2011-12-20 18:01:25
在Java中,Hashmap的大小由JVM內存限定。它可以增長的規模。就我所知,沒有硬性限制。
不知道C++。
有一個硬限制:int的最大值,因爲這是size()的返回類型。 – 2011-12-20 18:02:59
顯式沒有最大大小 - 它取決於您的平臺和STL的實現。例如,如果你的內存高度分散,並且實現使用連續的緩衝區(我懷疑這是因爲通常只有向量纔會這樣做),那麼在計算機內存耗盡之前,可能會用盡空間。
或者,如果在實現中容器擴展時分配了小塊,則您的內存限制是您的計算機具有的內存和您在OS中設置的限制的組合(如果ulimit恰好設置在Linux中或任何Windows的變體)。
該類確實有一個max_size()成員函數,但是如果你沒有設置它,它不應該影響你。所以,簡單的答案 - 除了依賴於您自己的計算機和操作系統的限制外,沒有限制。
在Java中,HashMap
的size()
的類型爲int
,所以在地圖中存在2^31-1元素的上限。
在C++中,map::max_size
返回最大值。元素的數量。在一個vanilla map
中,有一個至多爲SIZE_T_MAX
元素的上界,在現代硬件上是2^64-1。
您實際上將受到系統內存容量的限制。
如果您正在使用巨大的數據,請考慮這些龐大的數據來自何處。並以一種將大量數據保留在原來位置的方式設計您的地圖。
Java或C++本身不是限制。在實踐中,你只受到資源的限制。
從您的要求根據辦法可能是:
- 更緊湊的結構,如帕特里夏特里
- 數據庫解決方案或基於文件的地圖
- 基於分佈式DHT解決方案
嘗試看看here爲一些技巧。
std :: map和hashmap是動態結構。它們隨着元素的添加而增長,直到系統能夠爲它們提供內存。
max_size()成員函數給出了類實現(代碼中)能夠承受的上限,但該限制通常比代碼本身運行的系統容量更寬。
系統可用內存還取決於系統除了運行應用程序還在做什麼。
通過向操作系統查詢它可以爲您的進程提供的可用內存量,您可以根據經驗確定一個合理的數量,並將其除以元素大小爲「鍵加值加上一些開銷(通常爲20/24字節)」。
對於Java:
HashMap具有一個底層存儲是一個數組它總是2的大小的功率。最大可以是2^30。使用0.75的默認加載因子時,它將嘗試增加並且在大約7.5億個條目上失敗。
TreeMap不受限制,並且可以有2^31個條目(但size()將返回MAX_VALUE)類似於ConcurrentSkipList和ConcurrentHashMap。
有些信息要記住(大圖):
如果你的數據是巨大的,你不能在內存中保留它。你必須去輔助存儲:硬盤。當你去HDD時,你會失去hashmap的速度優化。每當你去到硬盤驅動器,你會招致延誤(尋找時間等)。搜索存儲在磁盤上的hashmap變成線性時間。
我想說的是,如果你的數據不能適應內存,地圖是無用的。
更好的解決方案是索引您的數據。將索引存儲在內存中,並有一個指向磁盤上您正在查找的數據的位置的指針。從磁盤檢索數據。
通過使用RAID存儲進一步改進此模型。 同樣去DB的結果與去HDD的延遲相同。
我建議你將所有的值存儲在一個數據庫中,並保存一個以散列值作爲關鍵字的內存字典。
- 1. SYSJOBID的最大尺寸是多少?
- 2. DataGridView的最大尺寸是多少?
- 3. RTP頭的最大尺寸是多少?
- 4. Cookie的最大尺寸是多少?
- 5. Web.config的最大尺寸是多少?
- 6. UINavigationBar titleView的最大尺寸是多少?
- 7. 條形圖中條的最大尺寸是多少?
- 8. GAE中最大可用JPEG圖像的尺寸是多少?
- 9. UITabBarItem圖像的最大尺寸是多少?
- 10. WP7中MediaHistoryItem的ImageStream的最大尺寸是多少?
- 11. iPhone中單個文件的最大尺寸是多少?
- 12. Java中String對象的最大大小是多少?
- 13. 什麼的的Scripting.Dictionary的最大尺寸是多少?
- 14. pygame的圖像尺寸是多少?
- 15. iPhone可以支持的紋理的最大尺寸是多少?
- 16. 拆分的以太網幀的最小和最大尺寸是多少
- 17. 特徵矩陣的最大尺寸是多少?
- 18. Jagged Arrays可容納的最大尺寸是多少?
- 19. HTML畫布的最大尺寸是多少?
- 20. FTP歡迎信息的最大尺寸是多少?
- 21. 現代GPU上紋理內存的最大尺寸是多少?
- 22. Post to Urban Airships「批量推送」的最大尺寸是多少?
- 23. iPad上的沙箱最大尺寸是多少?
- 24. Google Glass上apk的最大尺寸是多少?
- 25. 視頻背景的最大尺寸是多少?
- 26. 支持普通和大屏幕尺寸的PSD尺寸是多少?
- 27. 使用Google地圖的Android中的最大地圖尺寸
- 28. 最大尺寸
- 29. iPhone可以創建圖像組合的最大尺寸是多少?
- 30. Go,Java和C#中數組的最大長度是多少?
它有多大? – kennytm 2011-12-20 17:58:04
海量數據有多大? – Grammin 2011-12-20 17:58:34
你有沒有考慮過使用數據庫? – Marcelo 2011-12-20 17:59:03