qiangwang

Results 4 comments of qiangwang

@hankcs 麻烦评审下

> > 优化resize,避免fgc > > 我是看客,我是看到resize、shrink 都在build方法里,是前后调用,也不是循环体,为什么同一个方法内,先多申请一些,然后再shrink,能避免多次resize、fgc??所以有点儿好奇你的调用场景 使用时发现的现象:10s 内调了160次resize,双数组大小为40M,相当于10s内产生了160*40M=6400M=6.4G的数组 现象原因:在构建过程中,随着数据增加数组长度不够用需要扩容,如果每次扩容量太少就需要频繁调用resize扩容,而resize会产生废弃的旧的数组,这些数组没有被及时回收堆积起来就会触发fgc。build方法里的resize只是初始化,后续逻辑还会多次调用resize。 解决办法:增加每次resize的大小,避免频繁扩容,减少垃圾的产生,也就避免了fgc

@hankcs 这3个点都很有道理,是不是可以提供一个参数出来控制扩容比例(比如resizeRatio)?用户可以自己决定要不要用,也能明确知道对应的影响

@hankcs 看看最新的修改怎么样 关于2,给一个更大的初始值对用户来说使用难度会增大,多少合适其实是一个变化的过程,当字典不断增大需要持续调整,而设定一个合适的增长比例就比较简单了,根据用户能接受的内存峰值配置就好