From b34d9050373ad5f49372da3e177359ea5257c819 Mon Sep 17 00:00:00 2001 From: GeKoppe Date: Mon, 30 Mar 2026 00:47:43 +0200 Subject: [PATCH] Fixed memory leak --- lib/src/main/java/org/koppe/epub/client/EpubAdapter.java | 4 +++- .../java/org/koppe/epub/client/cache/AbstractCache.java | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/src/main/java/org/koppe/epub/client/EpubAdapter.java b/lib/src/main/java/org/koppe/epub/client/EpubAdapter.java index 8320309..695020c 100644 --- a/lib/src/main/java/org/koppe/epub/client/EpubAdapter.java +++ b/lib/src/main/java/org/koppe/epub/client/EpubAdapter.java @@ -5,6 +5,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.jetbrains.annotations.NotNull; @@ -51,6 +52,7 @@ class EpubAdapter { * Object mapper for transforming objects to json strings */ private final ObjectMapper mapper = new ObjectMapper(); + private final ExecutorService executor = Executors.newSingleThreadExecutor(); // #region add epub /** @@ -334,7 +336,7 @@ class EpubAdapter { } final PagedRequestDto finalResult = result; - Executors.newFixedThreadPool(1).submit(() -> { + executor.submit(() -> { logger.info("Caching results of paged request in different thread"); if (finalResult.getContent() != null) { logger.info("Trying to cache result content"); diff --git a/lib/src/main/java/org/koppe/epub/client/cache/AbstractCache.java b/lib/src/main/java/org/koppe/epub/client/cache/AbstractCache.java index d34883f..b2add95 100644 --- a/lib/src/main/java/org/koppe/epub/client/cache/AbstractCache.java +++ b/lib/src/main/java/org/koppe/epub/client/cache/AbstractCache.java @@ -3,6 +3,7 @@ import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; @@ -47,6 +48,10 @@ public abstract class AbstractCache implements Cache { * Maximum number of elements */ private int maxElements = -1; + /** + * Executor service for threaded execution + */ + private final ExecutorService executor = Executors.newSingleThreadExecutor(); /** * Calls {@link RefreshFunction#run(Object)} of the instances refresh function @@ -208,7 +213,7 @@ public void setValue(K key, V value) throws CachingException { lock.unlock(); if (maxElements >= 0 && cache.size() > maxElements) { - Executors.newFixedThreadPool(1).submit(this::removeOldest); + executor.submit(this::removeOldest); } }