From b32609307f75187a6a3822b8a951429c7fc924f3 Mon Sep 17 00:00:00 2001 From: Pascal Christoph Date: Mon, 10 Feb 2025 10:33:51 +0100 Subject: [PATCH] Fix memory leak (#666) Let those maps who are concerned implement Closeable. --- .../main/java/org/metafacture/metafix/maps/RdfMap.java | 9 ++++++++- .../java/org/metafacture/metamorph/maps/FileMap.java | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/metafix/src/main/java/org/metafacture/metafix/maps/RdfMap.java b/metafix/src/main/java/org/metafacture/metafix/maps/RdfMap.java index 4e7109f2d..99d4c824d 100644 --- a/metafix/src/main/java/org/metafacture/metafix/maps/RdfMap.java +++ b/metafix/src/main/java/org/metafacture/metafix/maps/RdfMap.java @@ -31,6 +31,7 @@ import org.apache.jena.riot.RDFDataMgr; import org.apache.jena.shared.PropertyNotFoundException; +import java.io.Closeable; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; @@ -56,7 +57,7 @@ * * @see org.metafacture.metamorph.maps.FileMap */ -public final class RdfMap extends AbstractReadOnlyMap { +public final class RdfMap extends AbstractReadOnlyMap implements Closeable { public static final String SELECT = "select"; public static final String TARGET = "target"; @@ -394,6 +395,12 @@ private String read(final String url) throws IOException { return conn.getURL().toString(); } + @Override + public void close() { + map.clear(); + model.close(); + } + private enum Select { SUBJECT, OBJECT, DEFAULT } diff --git a/metamorph/src/main/java/org/metafacture/metamorph/maps/FileMap.java b/metamorph/src/main/java/org/metafacture/metamorph/maps/FileMap.java index b67693252..2eda33a18 100644 --- a/metamorph/src/main/java/org/metafacture/metamorph/maps/FileMap.java +++ b/metamorph/src/main/java/org/metafacture/metamorph/maps/FileMap.java @@ -21,6 +21,7 @@ import org.metafacture.metamorph.api.helpers.AbstractReadOnlyMap; import java.io.BufferedReader; +import java.io.Closeable; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; @@ -60,7 +61,7 @@ * * @author Markus Michael Geipel */ -public final class FileMap extends AbstractReadOnlyMap { +public final class FileMap extends AbstractReadOnlyMap implements Closeable { private final FileOpener fileOpener = new FileOpener(); private final Map map = new HashMap<>(); @@ -290,4 +291,9 @@ public Set keySet() { return Collections.unmodifiableSet(map.keySet()); } + @Override + public void close() throws IOException { + map.clear(); + fileOpener.closeStream(); + } }