From 1b268035278f5247abcc226ac64e576d2ae7eb39 Mon Sep 17 00:00:00 2001 From: "Lukas Rieger (Blue)" Date: Sun, 12 May 2024 20:11:31 +0200 Subject: [PATCH] Update Caffeine, use soft values for chunk caches --- BlueMapCommon/build.gradle.kts | 4 ++-- BlueMapCore/build.gradle.kts | 10 +++++----- .../bluemap/core/map/lowres/LowresLayer.java | 16 +++++----------- .../bluemap/core/world/mca/MCAWorld.java | 9 ++++++++- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/BlueMapCommon/build.gradle.kts b/BlueMapCommon/build.gradle.kts index 51894011..f092b0c2 100644 --- a/BlueMapCommon/build.gradle.kts +++ b/BlueMapCommon/build.gradle.kts @@ -30,9 +30,9 @@ dependencies { api ("de.bluecolored.bluemap:BlueMapCore") compileOnly ("org.jetbrains:annotations:16.0.2") - compileOnly ("org.projectlombok:lombok:1.18.30") + compileOnly ("org.projectlombok:lombok:1.18.32") - annotationProcessor ("org.projectlombok:lombok:1.18.30") + annotationProcessor ("org.projectlombok:lombok:1.18.32") testImplementation ("org.junit.jupiter:junit-jupiter:5.8.2") testRuntimeOnly ("org.junit.jupiter:junit-jupiter-engine:5.8.2") diff --git a/BlueMapCore/build.gradle.kts b/BlueMapCore/build.gradle.kts index 1d758764..a9c7525b 100644 --- a/BlueMapCore/build.gradle.kts +++ b/BlueMapCore/build.gradle.kts @@ -60,7 +60,7 @@ repositories { @Suppress("GradlePackageUpdate") dependencies { - api ("com.github.ben-manes.caffeine:caffeine:2.8.5") + api ("com.github.ben-manes.caffeine:caffeine:3.1.8") api ("org.apache.commons:commons-lang3:3.6") api ("commons-io:commons-io:2.5") api ("org.spongepowered:configurate-hocon:4.1.2") @@ -73,14 +73,14 @@ dependencies { api ("de.bluecolored.bluemap:BlueMapAPI") compileOnly ("org.jetbrains:annotations:23.0.0") - compileOnly ("org.projectlombok:lombok:1.18.30") + compileOnly ("org.projectlombok:lombok:1.18.32") - annotationProcessor ("org.projectlombok:lombok:1.18.30") + annotationProcessor ("org.projectlombok:lombok:1.18.32") testImplementation ("org.junit.jupiter:junit-jupiter:5.8.2") testRuntimeOnly ("org.junit.jupiter:junit-jupiter-engine:5.8.2") - testCompileOnly ("org.projectlombok:lombok:1.18.30") - testAnnotationProcessor ("org.projectlombok:lombok:1.18.30") + testCompileOnly ("org.projectlombok:lombok:1.18.32") + testAnnotationProcessor ("org.projectlombok:lombok:1.18.32") } spotless { diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/lowres/LowresLayer.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/lowres/LowresLayer.java index 7ef70c09..cfdf3a01 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/lowres/LowresLayer.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/lowres/LowresLayer.java @@ -25,14 +25,16 @@ package de.bluecolored.bluemap.core.map.lowres; import com.flowpowered.math.vector.Vector2i; -import com.github.benmanes.caffeine.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 de.bluecolored.bluemap.core.BlueMap; import de.bluecolored.bluemap.core.logger.Logger; import de.bluecolored.bluemap.core.storage.GridStorage; import de.bluecolored.bluemap.core.util.Grid; import de.bluecolored.bluemap.core.util.Vector2iCache; import de.bluecolored.bluemap.core.util.math.Color; -import org.checkerframework.checker.nullness.qual.NonNull; import org.jetbrains.annotations.Nullable; import java.io.IOException; @@ -77,15 +79,7 @@ public LowresLayer( .scheduler(Scheduler.systemScheduler()) .expireAfterAccess(10, TimeUnit.SECONDS) .expireAfterWrite(5, TimeUnit.MINUTES) - .writer(new CacheWriter() { - @Override - public void write(@NonNull Vector2i key, @NonNull LowresTile value) {} - - @Override - public void delete(@NonNull Vector2i key, @Nullable LowresTile value, @NonNull RemovalCause cause) { - saveTile(key, value); - } - }) + .removalListener((Vector2i key, LowresTile value, RemovalCause cause) -> saveTile(key, value)) .build(tileWeakInstanceCache::get); } diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/world/mca/MCAWorld.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/world/mca/MCAWorld.java index 57eb3c54..356cecd3 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/world/mca/MCAWorld.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/world/mca/MCAWorld.java @@ -48,7 +48,10 @@ import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.concurrent.TimeUnit; import java.util.function.Predicate; @@ -76,13 +79,17 @@ public class MCAWorld implements World { private final ChunkLoader chunkLoader = new ChunkLoader(this); private final LoadingCache regionCache = Caffeine.newBuilder() .executor(BlueMap.THREAD_POOL) + .softValues() .maximumSize(32) .expireAfterWrite(10, TimeUnit.MINUTES) + .expireAfterAccess(1, TimeUnit.MINUTES) .build(this::loadRegion); private final LoadingCache chunkCache = Caffeine.newBuilder() .executor(BlueMap.THREAD_POOL) + .softValues() .maximumSize(10240) // 10 regions worth of chunks .expireAfterWrite(10, TimeUnit.MINUTES) + .expireAfterAccess(1, TimeUnit.MINUTES) .build(this::loadChunk); private MCAWorld(Path worldFolder, Key dimension, DataPack dataPack, LevelData levelData) {