[英]What happens when the concurrencyLevel is greater that the capacity of a ConcurrentHashMap?
[英]ConcurrentHashMap over the capacity
我是ConcurrentHashMap的新學員。 現在我寫下面的代碼:
ConcurrentHashMap<Integer, Integer> map = new ConcurrentHashMap(1);
for(int i=0; i<10; i++){
map.put(i,i);
}
//print map
我將ConcurrentHashMap的初始容量設置為1,然后我將10個值放入其中。 所以在我看來,ConcurrentHashMap只接收第一個並拒絕其余的9個; 但是,當我打印地圖時,我發現所有10個值都已存儲在地圖中。 那么它是否沒有使用初始容量參數,或者如果達到容量,ConcurrentHashMap可以自行增加?
初始容量是對哈希映射將包含多少元素的粗略估計。 一旦開始添加更多元素,哈希映射的大小將增加(線性或指數)。 增加哈希映射的大小會產生開銷。
讓我們說你需要一個哈希映射,它將包含穩定狀態下的100萬個密鑰。 然后你可能會用50k大小初始化哈希映射。
另一方面,如果您的哈希映射只包含穩定狀態下的1000個鍵,那么您可能會使用較小的值進行初始化。
編輯:
假設linear resizing
,對於100萬個鍵,如果初始化值為50,那么每次添加50個元素時,java必須調整大小(這將涉及復制)。 調整大小的數量大約為20.但如果您使用值初始化為500,則只調整兩次。
JVM會自動增加大小。 容量僅用於初始化任何集合將映射備份到特定大小。 如果您確定要向其添加至少X個項目,則將其初始化為該容量。 JVM將根據需要為您調整大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.