From 6a726a8c56b6c33f6b5cb77cedfd9a4a6ed394ad Mon Sep 17 00:00:00 2001 From: Sergey Matvienko Date: Tue, 17 Sep 2024 14:11:07 +0200 Subject: [PATCH] cache hashcode for UUIDBased and TbSubscription --- .../server/service/subscription/TbSubscription.java | 8 +++++++- .../server/common/data/id/UUIDBased.java | 13 +++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscription.java b/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscription.java index 4324a3514a..23b7591727 100644 --- a/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscription.java +++ b/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscription.java @@ -27,6 +27,9 @@ import java.util.function.BiConsumer; @AllArgsConstructor public abstract class TbSubscription { + /** Cache the hash code */ + private transient int hash; // Default to 0. The hash code calculated for this object likely never be zero + private final String serviceId; private final String sessionId; private final int subscriptionId; @@ -49,7 +52,10 @@ public abstract class TbSubscription { @Override public int hashCode() { - return Objects.hash(sessionId, subscriptionId, tenantId, entityId, type); + if (hash == 0) { + hash = Objects.hash(sessionId, subscriptionId, tenantId, entityId, type); + } + return hash; } } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/id/UUIDBased.java b/common/data/src/main/java/org/thingsboard/server/common/data/id/UUIDBased.java index e0a1abf9ff..6cf310f7b3 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/id/UUIDBased.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/id/UUIDBased.java @@ -25,6 +25,9 @@ public abstract class UUIDBased implements HasUUID, Serializable { private static final long serialVersionUID = 1L; + /** Cache the hash code */ + private transient int hash; // Default to 0. The hash code calculated for this object likely never be zero + private final UUID id; public UUIDBased() { @@ -43,10 +46,12 @@ public abstract class UUIDBased implements HasUUID, Serializable { @Override public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((id == null) ? 0 : id.hashCode()); - return result; + if (hash == 0) { + final int prime = 31; + int result = 1; + hash = prime * result + ((id == null) ? 0 : id.hashCode()); + } + return hash; } @Override