diff --git a/core/src/main/java/com/volmit/iris/core/pregenerator/cache/PregenCacheImpl.java b/core/src/main/java/com/volmit/iris/core/pregenerator/cache/PregenCacheImpl.java index f1e065fa2..d124b25bc 100644 --- a/core/src/main/java/com/volmit/iris/core/pregenerator/cache/PregenCacheImpl.java +++ b/core/src/main/java/com/volmit/iris/core/pregenerator/cache/PregenCacheImpl.java @@ -3,7 +3,9 @@ package com.volmit.iris.core.pregenerator.cache; import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.LoadingCache; import com.github.benmanes.caffeine.cache.RemovalCause; +import com.github.benmanes.caffeine.cache.Scheduler; import com.volmit.iris.Iris; +import com.volmit.iris.util.data.KCache; import com.volmit.iris.util.data.Varint; import com.volmit.iris.util.documentation.ChunkCoordinates; import com.volmit.iris.util.documentation.RegionCoordinates; @@ -25,6 +27,8 @@ class PregenCacheImpl implements PregenCache { private final HyperLock hyperLock = new HyperLock(SIZE * 2, true); private final LoadingCache cache = Caffeine.newBuilder() .expireAfterAccess(10, TimeUnit.SECONDS) + .executor(KCache.EXECUTOR) + .scheduler(Scheduler.systemScheduler()) .maximumSize(SIZE) .removalListener(this::onRemoval) .evictionListener(this::onRemoval) diff --git a/core/src/main/java/com/volmit/iris/core/service/GlobalCacheSVC.java b/core/src/main/java/com/volmit/iris/core/service/GlobalCacheSVC.java index e8c194974..ceeedbee7 100644 --- a/core/src/main/java/com/volmit/iris/core/service/GlobalCacheSVC.java +++ b/core/src/main/java/com/volmit/iris/core/service/GlobalCacheSVC.java @@ -2,9 +2,11 @@ package com.volmit.iris.core.service; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; +import com.github.benmanes.caffeine.cache.Scheduler; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.pregenerator.cache.PregenCache; import com.volmit.iris.util.collection.KMap; +import com.volmit.iris.util.data.KCache; import com.volmit.iris.util.plugin.IrisService; import lombok.NonNull; import org.bukkit.Bukkit; @@ -20,7 +22,11 @@ import java.io.File; import java.util.function.Function; public class GlobalCacheSVC implements IrisService { - private static final Cache REFERENCE_CACHE = Caffeine.newBuilder().weakValues().build(); + private static final Cache REFERENCE_CACHE = Caffeine.newBuilder() + .executor(KCache.EXECUTOR) + .scheduler(Scheduler.systemScheduler()) + .weakValues() + .build(); private final KMap globalCache = new KMap<>(); private transient boolean lastState; private static boolean disabled = true; diff --git a/core/src/main/java/com/volmit/iris/util/data/KCache.java b/core/src/main/java/com/volmit/iris/util/data/KCache.java index 5f33cdaeb..0226dedb7 100644 --- a/core/src/main/java/com/volmit/iris/util/data/KCache.java +++ b/core/src/main/java/com/volmit/iris/util/data/KCache.java @@ -21,10 +21,16 @@ package com.volmit.iris.util.data; import com.github.benmanes.caffeine.cache.CacheLoader; import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.LoadingCache; +import com.github.benmanes.caffeine.cache.Scheduler; import com.volmit.iris.engine.framework.MeteredCache; import com.volmit.iris.util.math.RollingSequence; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + public class KCache implements MeteredCache { + public static final ExecutorService EXECUTOR = Executors.newVirtualThreadPerTaskExecutor(); + private final long max; private final LoadingCache cache; private final boolean fastDump; @@ -46,6 +52,8 @@ public class KCache implements MeteredCache { return Caffeine .newBuilder() .maximumSize(max) + .scheduler(Scheduler.systemScheduler()) + .executor(EXECUTOR) .initialCapacity((int) (max)) .build((k) -> loader == null ? null : loader.load(k)); }