diff --git a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/faster_ingredients/IngredientMixin.java b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/faster_ingredients/IngredientMixin.java index ac12f70d..0c920812 100644 --- a/src/main/java/org/embeddedt/modernfix/common/mixin/perf/faster_ingredients/IngredientMixin.java +++ b/src/main/java/org/embeddedt/modernfix/common/mixin/perf/faster_ingredients/IngredientMixin.java @@ -135,6 +135,7 @@ public abstract class IngredientMixin implements ExtendedIngredient { return stacks; } } + IngredientItemStacksSoftReference.clearReferences(); ItemStack[] result = computeItemsArray(); this.mfix$cachedItemStacks = new IngredientItemStacksSoftReference((Ingredient)(Object)this, result); return result; diff --git a/src/main/java/org/embeddedt/modernfix/forge/recipe/IngredientItemStacksSoftReference.java b/src/main/java/org/embeddedt/modernfix/forge/recipe/IngredientItemStacksSoftReference.java index bfb0c94a..2c39a70e 100644 --- a/src/main/java/org/embeddedt/modernfix/forge/recipe/IngredientItemStacksSoftReference.java +++ b/src/main/java/org/embeddedt/modernfix/forge/recipe/IngredientItemStacksSoftReference.java @@ -11,28 +11,15 @@ public class IngredientItemStacksSoftReference extends SoftReference QUEUE = new ReferenceQueue<>(); - private static final Thread DISCARD_THREAD = new Thread(IngredientItemStacksSoftReference::clearReferences, "Ingredient reference clearing thread"); - - static { - DISCARD_THREAD.setPriority(Thread.NORM_PRIORITY + 2); - DISCARD_THREAD.setDaemon(true); - DISCARD_THREAD.start(); - } public IngredientItemStacksSoftReference(Ingredient ingredient, ItemStack[] stacks) { super(stacks, QUEUE); this.ingredient = ingredient; } - private static void clearReferences() { - while (true) { - Reference ref; - try { - ref = QUEUE.remove(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - return; - } + public static void clearReferences() { + Reference ref; + while ((ref = QUEUE.poll()) != null) { if (ref instanceof IngredientItemStacksSoftReference ingRef && ingRef.ingredient instanceof ExtendedIngredient extIng) { // Null out the reference to the SoftReference object, to allow the SoftReference itself to be garbage collected. extIng.mfix$clearReference();