From 6373dbb1b8552f7d61aaf85f3d69b0aae663f460 Mon Sep 17 00:00:00 2001 From: Julian Krings Date: Fri, 21 Nov 2025 16:21:54 +0100 Subject: [PATCH] potential optimization for the noise cache --- .../com/volmit/iris/core/tools/IrisToolbelt.java | 2 +- .../com/volmit/iris/util/cache/ChunkCache2D.java | 16 +++++++++++++++- .../com/volmit/iris/util/cache/WorldCache2D.java | 4 ++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java b/core/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java index a28b7c964..68812036f 100644 --- a/core/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java +++ b/core/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java @@ -234,7 +234,7 @@ public class IrisToolbelt { } public static void retainMantleDataForSlice(String className) { - toolbeltConfiguration.put("retain.mantle." + className, true); + toolbeltConfiguration.put("retain.mantle." + className, Boolean.TRUE); } public static boolean isRetainingMantleDataForSlice(String className) { diff --git a/core/src/main/java/com/volmit/iris/util/cache/ChunkCache2D.java b/core/src/main/java/com/volmit/iris/util/cache/ChunkCache2D.java index 00fd9f608..f68dff1bf 100644 --- a/core/src/main/java/com/volmit/iris/util/cache/ChunkCache2D.java +++ b/core/src/main/java/com/volmit/iris/util/cache/ChunkCache2D.java @@ -2,22 +2,36 @@ package com.volmit.iris.util.cache; import com.volmit.iris.util.function.Function2; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.VarHandle; + public class ChunkCache2D { private static final boolean FAST = Boolean.getBoolean("iris.cache.fast"); + private static final boolean DYNAMIC = Boolean.getBoolean("iris.cache.dynamic"); + private static final VarHandle AA = MethodHandles.arrayElementVarHandle(Entry[].class); private final Entry[] cache; @SuppressWarnings({"unchecked"}) public ChunkCache2D() { this.cache = new Entry[256]; + if (DYNAMIC) return; for (int i = 0; i < cache.length; i++) { cache[i] = FAST ? new FastEntry<>() : new Entry<>(); } } + @SuppressWarnings({"unchecked"}) public T get(int x, int z, Function2 resolver) { int key = ((z & 15) * 16) + (x & 15); - return cache[key].compute(x, z, resolver); + var entry = cache[key]; + if (entry == null) { + entry = FAST ? new FastEntry<>() : new Entry<>(); + if (!AA.compareAndSet(cache, key, null, entry)) { + entry = (Entry) AA.getVolatile(cache, key); + } + } + return entry.compute(x, z, resolver); } private static class Entry { diff --git a/core/src/main/java/com/volmit/iris/util/cache/WorldCache2D.java b/core/src/main/java/com/volmit/iris/util/cache/WorldCache2D.java index 2dc38c829..1d0ea3f29 100644 --- a/core/src/main/java/com/volmit/iris/util/cache/WorldCache2D.java +++ b/core/src/main/java/com/volmit/iris/util/cache/WorldCache2D.java @@ -25,4 +25,8 @@ public class WorldCache2D { public long getSize() { return chunks.size() * 256L; } + + public long getMaxSize() { + return chunks.capacity() * 256L; + } }