Use nested caches for enormous placements instead of weak hash map

Should recycle memory better
This commit is contained in:
DBotThePony 2025-03-09 13:34:47 +07:00
parent cc456958e1
commit 44b0bcd776
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -66,20 +66,22 @@ class EnormousPlacement(
}
}
private val level2cache = WeakHashMap<WorldGenLevel, Cache<ChunkPos, GeneratedChunk>>()
private val lock = ReentrantLock()
private val level2cache = Caffeine.newBuilder()
.scheduler(Scheduler.systemScheduler())
.executor(Util.backgroundExecutor())
.expireAfterAccess(Duration.ofMinutes(10))
.weakKeys()
.build<WorldGenLevel, Cache<ChunkPos, GeneratedChunk>>()
private fun getCache(level: WorldGenLevel): Cache<ChunkPos, GeneratedChunk> {
return lock.withLock {
level2cache.computeIfAbsent(level) {
Caffeine.newBuilder()
.scheduler(Scheduler.systemScheduler())
.executor(Util.backgroundExecutor())
.maximumSize(16384L)
.expireAfterWrite(Duration.ofMinutes(5))
.softValues()
.build()
}
return level2cache.get(level) {
Caffeine.newBuilder()
.scheduler(Scheduler.systemScheduler())
.executor(Util.backgroundExecutor())
.maximumSize(16384L)
.expireAfterWrite(Duration.ofMinutes(5))
.softValues()
.build()
}
}