fix FastTreeMap hash <0 and comfortableCapacity size optimize

This commit is contained in:
libin
2023-11-09 12:00:23 +08:00
parent d8f1ef7f26
commit f1b0835fb5
2 changed files with 7 additions and 2 deletions
@@ -93,6 +93,9 @@ public class FastTreeMapIntLong {
var size = keys.length;
// 目标数小于或等于数组的第一个元素
if(key < 0){
key = Math.abs(key);
}
if (key <= keys[0]) {
return 0;
}
@@ -17,6 +17,7 @@ import com.zfoo.protocol.model.Pair;
import com.zfoo.protocol.util.AssertionUtils;
import com.zfoo.protocol.util.IOUtils;
import com.zfoo.protocol.util.StringUtils;
import io.netty.util.internal.MathUtil;
import java.util.*;
@@ -115,9 +116,10 @@ public abstract class CollectionUtils {
* CN: 计算HashMap初始化合适的大小,为了安全必须给初始化的集合一个最大上限,防止反序列化一个不合法的包导致内存突然升高
*/
public static int comfortableCapacity(int capacity) {
return capacity < 16
return MathUtil.safeFindNextPositivePowerOfTwo(capacity);
/* return capacity < 16
? (capacity < 8 ? 16 : 32)
: (capacity < 32 ? 64 : Math.min(capacity << 1, IOUtils.BYTES_PER_MB));
: (capacity < 32 ? 64 : Math.min(capacity << 1, IOUtils.BYTES_PER_MB));*/
}
public static int capacity(int expectedSize) {