From f1b0835fb51968e6a6e7712af8b8467413b30a59 Mon Sep 17 00:00:00 2001 From: libin Date: Thu, 9 Nov 2023 12:00:23 +0800 Subject: [PATCH] fix FastTreeMap hash <0 and comfortableCapacity size optimize --- net/src/main/java/com/zfoo/net/util/FastTreeMapIntLong.java | 3 +++ .../java/com/zfoo/protocol/collection/CollectionUtils.java | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/net/src/main/java/com/zfoo/net/util/FastTreeMapIntLong.java b/net/src/main/java/com/zfoo/net/util/FastTreeMapIntLong.java index fc7e3d66..2e5fc5ee 100644 --- a/net/src/main/java/com/zfoo/net/util/FastTreeMapIntLong.java +++ b/net/src/main/java/com/zfoo/net/util/FastTreeMapIntLong.java @@ -93,6 +93,9 @@ public class FastTreeMapIntLong { var size = keys.length; // 目标数小于或等于数组的第一个元素 + if(key < 0){ + key = Math.abs(key); + } if (key <= keys[0]) { return 0; } diff --git a/protocol/src/main/java/com/zfoo/protocol/collection/CollectionUtils.java b/protocol/src/main/java/com/zfoo/protocol/collection/CollectionUtils.java index 35ec1246..069a430c 100644 --- a/protocol/src/main/java/com/zfoo/protocol/collection/CollectionUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/collection/CollectionUtils.java @@ -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) {