1、 生存期長的keyvalue實例刷寫到磁盤中--》老生代堆上生成孔洞-》孔洞愈來愈多,沒法足夠大的連續空間分配-》JRE使用 stop-the-world垃圾回收器-》重寫整個堆空間,並壓縮剩餘可用對象
java
2、 解決以上問題的方法 :web
0.92版本後使用 本地memstore分配緩衝區(memstore-local allocation buffer) MSLAB
spa
即,從堆中分配一樣大小的對象,當最終被回收時,堆中將留下固定大小的孔洞。orm
3、配置文件中 配置:對象
1 經過hbase.hregion.memstore.mslab.enabled 來配置內存
2 分配緩衝區大小:hbase.hregion.memstore.mslab.chunksize ,默認是2M,且是合理的。it
根據本身的keyvalue實例大小來調整。io
3 存儲緩衝區上邊界:hbase.hregion.memstore.mslab.max.allocation 屬性,默認256kb,配置
超過這個值,直接在java堆中申請空間。垃圾回收
四 優缺點:
優勢:推遲垃圾回收停頓的發生
缺點:1 浪費堆空間,不能充分利用
2 使用緩衝區須要額外的內存複製工做,比直接使用keyvalues實例