From 08f3e4d42a3685d2bf4794f5f3c94710a35ad0c8 Mon Sep 17 00:00:00 2001 From: Alexdoru <57050655+Alexdoru@users.noreply.github.com> Date: Sun, 24 May 2026 15:19:20 +0200 Subject: [PATCH] intern superclass and interfaces of ClassHeirachyManager data (#46) --- .../codechicken/lib/asm/ClassHeirachyManager.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/codechicken/lib/asm/ClassHeirachyManager.java b/src/main/java/codechicken/lib/asm/ClassHeirachyManager.java index c606fd7..f847326 100644 --- a/src/main/java/codechicken/lib/asm/ClassHeirachyManager.java +++ b/src/main/java/codechicken/lib/asm/ClassHeirachyManager.java @@ -2,6 +2,7 @@ package codechicken.lib.asm; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; import net.minecraft.launchwrapper.IClassTransformer; import net.minecraft.launchwrapper.Launch; @@ -107,6 +108,7 @@ public class ClassHeirachyManager implements IClassTransformer { private static class ClassInfo { public static final ClassInfo OBJECT = new ClassInfo(); + private static final Map STRING_POOL = new ConcurrentHashMap<>(256); public final String superclass; public final String[] interfaces; @@ -125,7 +127,7 @@ public class ClassHeirachyManager implements IClassTransformer { superclass = "java.lang.Object"; parent = OBJECT; } else { - superclass = toKey(superName); + superclass = pool(toKey(superName)); } if (interfaces == null || interfaces.length == 0) { @@ -133,7 +135,7 @@ public class ClassHeirachyManager implements IClassTransformer { } else { this.interfaces = new String[interfaces.length]; for (int i = 0; i < interfaces.length; i++) { - this.interfaces[i] = toKey(interfaces[i]); + this.interfaces[i] = pool(toKey(interfaces[i])); } } } @@ -148,7 +150,7 @@ public class ClassHeirachyManager implements IClassTransformer { this.superclass = "java.lang.Object"; this.parent = OBJECT; } else { - this.superclass = toKey(superclass.getName()); + this.superclass = pool(toKey(superclass.getName())); } } final Class[] interfaces = aclass.getInterfaces(); @@ -157,7 +159,7 @@ public class ClassHeirachyManager implements IClassTransformer { } else { this.interfaces = new String[interfaces.length]; for (int i = 0; i < interfaces.length; i++) { - this.interfaces[i] = toKey(interfaces[i].getName()); + this.interfaces[i] = pool(toKey(interfaces[i].getName())); } } } @@ -172,5 +174,9 @@ public class ClassHeirachyManager implements IClassTransformer { this.parent = parentInfo; return parentInfo.hasSuper(superclass); } + + private static String pool(String s) { + return STRING_POOL.computeIfAbsent(s, Function.identity()); + } } }