Skip to content

Commit 03ac098

Browse files
committed
Release some more heap-space when bluemap is idle
1 parent 2c06a0b commit 03ac098

File tree

4 files changed

+17
-6
lines changed

4 files changed

+17
-6
lines changed

common/src/main/java/de/bluecolored/bluemap/common/plugin/Plugin.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import de.bluecolored.bluemap.common.config.*;
3434
import de.bluecolored.bluemap.common.debug.StateDumper;
3535
import de.bluecolored.bluemap.common.live.LivePlayersDataSupplier;
36+
import de.bluecolored.bluemap.common.metrics.Metrics;
3637
import de.bluecolored.bluemap.common.plugin.skins.PlayerSkinUpdater;
3738
import de.bluecolored.bluemap.common.rendermanager.MapUpdatePreparationTask;
3839
import de.bluecolored.bluemap.common.rendermanager.RenderManager;
@@ -42,9 +43,9 @@
4243
import de.bluecolored.bluemap.common.serverinterface.ServerWorld;
4344
import de.bluecolored.bluemap.common.web.*;
4445
import de.bluecolored.bluemap.common.web.http.HttpServer;
45-
import de.bluecolored.bluemap.common.metrics.Metrics;
4646
import de.bluecolored.bluemap.core.logger.Logger;
4747
import de.bluecolored.bluemap.core.map.BmMap;
48+
import de.bluecolored.bluemap.core.map.hires.ArrayTileModel;
4849
import de.bluecolored.bluemap.core.resources.MinecraftVersion;
4950
import de.bluecolored.bluemap.core.resources.pack.resourcepack.ResourcePack;
5051
import de.bluecolored.bluemap.core.storage.Storage;
@@ -278,11 +279,15 @@ private void load(@Nullable ResourcePack preloadedResourcePack) throws IOExcepti
278279
//init timer
279280
daemonTimer = new Timer("BlueMap-Plugin-DaemonTimer", true);
280281

281-
//periodically save
282+
//periodically save and release memory
282283
TimerTask saveTask = new TimerTask() {
283284
@Override
284285
public void run() {
285286
save();
287+
288+
// if nothing is being actively rendered, clear caches and pools to release some heap-space
289+
if (!renderManager.isRunning() || renderManager.getCurrentRenderTask() == null)
290+
ArrayTileModel.instancePool().clear();
286291
}
287292
};
288293
daemonTimer.schedule(saveTask, TimeUnit.MINUTES.toMillis(10), TimeUnit.MINUTES.toMillis(10));

common/src/main/java/de/bluecolored/bluemap/common/rendermanager/MapUpdateTask.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,17 @@
2929
import lombok.Getter;
3030

3131
import java.util.Collection;
32+
import java.util.stream.Stream;
3233

3334
public class MapUpdateTask extends CombinedRenderTask<RenderTask> implements MapRenderTask {
3435

3536
@Getter private final BmMap map;
3637

3738
public MapUpdateTask(BmMap map, Collection<Vector2i> regions, TileUpdateStrategy force) {
38-
this(map, regions.stream()
39-
.<RenderTask>map(region -> new WorldRegionRenderTask(map, region, force))
40-
.toList());
39+
this(map, Stream.concat(
40+
regions.stream().<RenderTask>map(region -> new WorldRegionRenderTask(map, region, force)),
41+
Stream.of(new MapSaveTask(map))
42+
).toList());
4143
}
4244

4345
protected MapUpdateTask(BmMap map, Collection<RenderTask> tasks) {

core/src/main/java/de/bluecolored/bluemap/core/map/hires/ArrayTileModel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ private void swap(int face1, int face2) {
498498
materialIndex[face2] = vi;
499499
}
500500

501-
static InstancePool<ArrayTileModel> instancePool() {
501+
public static InstancePool<ArrayTileModel> instancePool() {
502502
return INSTANCE_POOL;
503503
}
504504

core/src/main/java/de/bluecolored/bluemap/core/util/InstancePool.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,8 @@ public void recycleInstance(T instance) {
5858
pool.offer(instance);
5959
}
6060

61+
public void clear() {
62+
pool.clear();
63+
}
64+
6165
}

0 commit comments

Comments
 (0)