From a6dba84e1d4d1bea520be442c604296e400c1992 Mon Sep 17 00:00:00 2001 From: Stuart McCulloch Date: Mon, 9 Mar 2026 00:59:37 +0000 Subject: [PATCH] Suggestion from Claude: trim cache info entry size by changing ticks from long to int This gives us 4,294,967,295 update ticks which is still enough for a long running app given we only bump the tick count when a new class definition is shared in the cache. --- .../java/datadog/instrument/utils/ClassInfoCache.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/utils/src/main/java/datadog/instrument/utils/ClassInfoCache.java b/utils/src/main/java/datadog/instrument/utils/ClassInfoCache.java index c75549a..e5249d8 100644 --- a/utils/src/main/java/datadog/instrument/utils/ClassInfoCache.java +++ b/utils/src/main/java/datadog/instrument/utils/ClassInfoCache.java @@ -7,7 +7,7 @@ package datadog.instrument.utils; import java.util.Arrays; -import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicInteger; /** * Shares class information from multiple classloaders in a single cache. @@ -28,7 +28,7 @@ public final class ClassInfoCache { private static final int ALL_CLASS_LOADERS = -1; // global monotonic counter; cheap way to track aging as info is shared - static final AtomicLong TICKS = new AtomicLong(); + static final AtomicInteger TICKS = new AtomicInteger(Integer.MIN_VALUE); // fixed-size hashtable of shared information, indexed by class-name private final SharedInfo[] shared; @@ -190,7 +190,7 @@ public void share(String className, T info, int classLoaderKeyId) { // always wrap info in a new wrapper to avoid consistency issues final SharedInfo update = new SharedInfo(className, info, classLoaderKeyId); - long oldestTick = Long.MAX_VALUE; + int oldestTick = Integer.MAX_VALUE; int oldestSlot = -1; // search by repeated hashing; stop when we find an empty slot, @@ -200,7 +200,7 @@ public void share(String className, T info, int classLoaderKeyId) { SharedInfo existing = shared[slot]; if (existing != null && !existing.equals(update)) { // slot already used by a different class - long tick = existing.accessed; + int tick = existing.accessed; if (i < MAX_HASH_ATTEMPTS) { // still more slots to search if (tick < oldestTick) { @@ -246,7 +246,7 @@ static final class SharedInfo { // optional class-loader key final int classLoaderKeyId; - long accessed; + int accessed; SharedInfo(String className, Object classInfo, int classLoaderKeyId) { this.className = className;