第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

用Map實(shí)現(xiàn)loadfactor還是不行,不知有沒其它解決方案。

用Map實(shí)現(xiàn)loadfactor還是不行,不知有沒其它解決方案。

波斯汪 2022-10-20 19:15:30
由于放進(jìn)Map容器數(shù)據(jù)量很大,一次性放入的話會(huì)導(dǎo)致堆溢出,假如有1010萬條記錄,如何限制Map的輸出記錄數(shù),當(dāng)Map里存放有100萬條記錄時(shí)就輸出到文件,依此類推,第11次把最后剩余的10萬條也輸出到文件。Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
查看完整描述

3 回答

?
慕哥6287543

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊

Java里一般是傳遞引用,
而Map容器里,value也是保存的是引用,也就是一個(gè)指針。
Map本身的內(nèi)存占用其實(shí)不是很大。
內(nèi)存占用情況要按 指針指向的實(shí)例進(jìn)行統(tǒng)計(jì)。

也就是那些數(shù)據(jù)的大小統(tǒng)計(jì)。
因?yàn)镸ap是一個(gè)值保存對(duì)象,讓Map負(fù)責(zé)保存數(shù)據(jù)是不合理的設(shè)計(jì)。
相反應(yīng)該在 向Map對(duì)象寫入數(shù)據(jù)的地方添加檢查邏輯。
比如

Java代碼  

  1. void readData(SomeReader reader) {  

  2.     Map<String, Object> datamap = new HashMap<String, Object>();  

  3.     while (null != (Object data  = reader.read()) {  

  4.       String key = extractKey(data);  

  5.       datamap.put(key, data);  

  6.       if (datamap.size()>10000) {  

  7.          storeAndClearMap(datamap);  

  8.       }  

  9.     }  

  10.  }  


查看完整回答
反對(duì) 回復(fù) 2022-10-24
?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

apache commons 的org.apache.commons.collections.map.LRUMap可以解決內(nèi)存溢出,寫到文件這段功能,自己利用LRUMap重寫下

查看完整回答
反對(duì) 回復(fù) 2022-10-24
?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊

我說一個(gè)思路哈。
你可以自己定義一個(gè)put方法,在你的put方法里面首先判斷map的size,每次到了i%100==0的時(shí)候就輸出到文件,然后將map置為null,繼續(xù)往里面添加數(shù)據(jù),然后最后再把剩下的都輸出,類似

  1. myPut(data) {  

  2.    if(map.size%100==0) {  

  3.       flushToFile();  

  4.    }  

  5.    map.put(data);  

  6. }  


查看完整回答
反對(duì) 回復(fù) 2022-10-24
  • 3 回答
  • 0 關(guān)注
  • 143 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)