mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-12-19 15:09:18 +00:00
move caffeine cache executors into a virtual thread executor
This commit is contained in:
@@ -3,7 +3,9 @@ package com.volmit.iris.core.pregenerator.cache;
|
|||||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||||
import com.github.benmanes.caffeine.cache.LoadingCache;
|
import com.github.benmanes.caffeine.cache.LoadingCache;
|
||||||
import com.github.benmanes.caffeine.cache.RemovalCause;
|
import com.github.benmanes.caffeine.cache.RemovalCause;
|
||||||
|
import com.github.benmanes.caffeine.cache.Scheduler;
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
|
import com.volmit.iris.util.data.KCache;
|
||||||
import com.volmit.iris.util.data.Varint;
|
import com.volmit.iris.util.data.Varint;
|
||||||
import com.volmit.iris.util.documentation.ChunkCoordinates;
|
import com.volmit.iris.util.documentation.ChunkCoordinates;
|
||||||
import com.volmit.iris.util.documentation.RegionCoordinates;
|
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 HyperLock hyperLock = new HyperLock(SIZE * 2, true);
|
||||||
private final LoadingCache<Pos, Plate> cache = Caffeine.newBuilder()
|
private final LoadingCache<Pos, Plate> cache = Caffeine.newBuilder()
|
||||||
.expireAfterAccess(10, TimeUnit.SECONDS)
|
.expireAfterAccess(10, TimeUnit.SECONDS)
|
||||||
|
.executor(KCache.EXECUTOR)
|
||||||
|
.scheduler(Scheduler.systemScheduler())
|
||||||
.maximumSize(SIZE)
|
.maximumSize(SIZE)
|
||||||
.removalListener(this::onRemoval)
|
.removalListener(this::onRemoval)
|
||||||
.evictionListener(this::onRemoval)
|
.evictionListener(this::onRemoval)
|
||||||
|
|||||||
@@ -2,9 +2,11 @@ package com.volmit.iris.core.service;
|
|||||||
|
|
||||||
import com.github.benmanes.caffeine.cache.Cache;
|
import com.github.benmanes.caffeine.cache.Cache;
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
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.IrisSettings;
|
||||||
import com.volmit.iris.core.pregenerator.cache.PregenCache;
|
import com.volmit.iris.core.pregenerator.cache.PregenCache;
|
||||||
import com.volmit.iris.util.collection.KMap;
|
import com.volmit.iris.util.collection.KMap;
|
||||||
|
import com.volmit.iris.util.data.KCache;
|
||||||
import com.volmit.iris.util.plugin.IrisService;
|
import com.volmit.iris.util.plugin.IrisService;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@@ -20,7 +22,11 @@ import java.io.File;
|
|||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
public class GlobalCacheSVC implements IrisService {
|
public class GlobalCacheSVC implements IrisService {
|
||||||
private static final Cache<String, PregenCache> REFERENCE_CACHE = Caffeine.newBuilder().weakValues().build();
|
private static final Cache<String, PregenCache> REFERENCE_CACHE = Caffeine.newBuilder()
|
||||||
|
.executor(KCache.EXECUTOR)
|
||||||
|
.scheduler(Scheduler.systemScheduler())
|
||||||
|
.weakValues()
|
||||||
|
.build();
|
||||||
private final KMap<String, PregenCache> globalCache = new KMap<>();
|
private final KMap<String, PregenCache> globalCache = new KMap<>();
|
||||||
private transient boolean lastState;
|
private transient boolean lastState;
|
||||||
private static boolean disabled = true;
|
private static boolean disabled = true;
|
||||||
|
|||||||
@@ -21,10 +21,16 @@ package com.volmit.iris.util.data;
|
|||||||
import com.github.benmanes.caffeine.cache.CacheLoader;
|
import com.github.benmanes.caffeine.cache.CacheLoader;
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||||
import com.github.benmanes.caffeine.cache.LoadingCache;
|
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.engine.framework.MeteredCache;
|
||||||
import com.volmit.iris.util.math.RollingSequence;
|
import com.volmit.iris.util.math.RollingSequence;
|
||||||
|
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
public class KCache<K, V> implements MeteredCache {
|
public class KCache<K, V> implements MeteredCache {
|
||||||
|
public static final ExecutorService EXECUTOR = Executors.newVirtualThreadPerTaskExecutor();
|
||||||
|
|
||||||
private final long max;
|
private final long max;
|
||||||
private final LoadingCache<K, V> cache;
|
private final LoadingCache<K, V> cache;
|
||||||
private final boolean fastDump;
|
private final boolean fastDump;
|
||||||
@@ -46,6 +52,8 @@ public class KCache<K, V> implements MeteredCache {
|
|||||||
return Caffeine
|
return Caffeine
|
||||||
.newBuilder()
|
.newBuilder()
|
||||||
.maximumSize(max)
|
.maximumSize(max)
|
||||||
|
.scheduler(Scheduler.systemScheduler())
|
||||||
|
.executor(EXECUTOR)
|
||||||
.initialCapacity((int) (max))
|
.initialCapacity((int) (max))
|
||||||
.build((k) -> loader == null ? null : loader.load(k));
|
.build((k) -> loader == null ? null : loader.load(k));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user