diff --git a/core/java/src/net/i2p/data/Hash.java b/core/java/src/net/i2p/data/Hash.java index 23d466d68..555b00e22 100644 --- a/core/java/src/net/i2p/data/Hash.java +++ b/core/java/src/net/i2p/data/Hash.java @@ -104,4 +104,11 @@ public class Hash extends SimpleDataStructure { } return _base64ed; } + + /** + * @since 0.9.17 + */ + public static void clearCache() { + _cache.clear(); + } } diff --git a/core/java/src/net/i2p/data/PublicKey.java b/core/java/src/net/i2p/data/PublicKey.java index ae5179ae4..aeb9e0096 100644 --- a/core/java/src/net/i2p/data/PublicKey.java +++ b/core/java/src/net/i2p/data/PublicKey.java @@ -68,4 +68,11 @@ public class PublicKey extends SimpleDataStructure { public int length() { return KEYSIZE_BYTES; } + + /** + * @since 0.9.17 + */ + public static void clearCache() { + _cache.clear(); + } } diff --git a/core/java/src/net/i2p/data/SDSCache.java b/core/java/src/net/i2p/data/SDSCache.java index 9fecb6a14..ab7768014 100644 --- a/core/java/src/net/i2p/data/SDSCache.java +++ b/core/java/src/net/i2p/data/SDSCache.java @@ -91,9 +91,16 @@ public class SDSCache { */ private class Shutdown implements Runnable { public void run() { - synchronized(_cache) { - _cache.clear(); - } + clear(); + } + } + + /** + * @since 0.9.17 + */ + public void clear() { + synchronized(_cache) { + _cache.clear(); } } diff --git a/core/java/src/net/i2p/data/SigningPublicKey.java b/core/java/src/net/i2p/data/SigningPublicKey.java index 50dba7213..386deadac 100644 --- a/core/java/src/net/i2p/data/SigningPublicKey.java +++ b/core/java/src/net/i2p/data/SigningPublicKey.java @@ -193,4 +193,11 @@ public class SigningPublicKey extends SimpleDataStructure { buf.append(']'); return buf.toString(); } + + /** + * @since 0.9.17 + */ + public static void clearCache() { + _cache.clear(); + } } diff --git a/history.txt b/history.txt index ac488f87f..bfb03b9ad 100644 --- a/history.txt +++ b/history.txt @@ -1,4 +1,5 @@ 2014-11-12 zzz + * Data: Clear more caches when under memory pressure and at shutdown * Plugins: Fix bug in stopping a ClientApp plugin with $parameters in the args 2014-11-09 zzz diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java index bb597d2e2..ab8e7c38b 100644 --- a/router/java/src/net/i2p/router/Router.java +++ b/router/java/src/net/i2p/router/Router.java @@ -25,14 +25,18 @@ import java.util.concurrent.ConcurrentHashMap; import gnu.getopt.Getopt; +import net.i2p.crypto.SigUtil; import net.i2p.data.Base64; import net.i2p.data.Certificate; import net.i2p.data.DataFormatException; import net.i2p.data.DataHelper; import net.i2p.data.Destination; -import net.i2p.data.router.RouterInfo; +import net.i2p.data.Hash; +import net.i2p.data.PublicKey; import net.i2p.data.SigningPrivateKey; +import net.i2p.data.SigningPublicKey; import net.i2p.data.i2np.GarlicMessage; +import net.i2p.data.router.RouterInfo; import net.i2p.router.message.GarlicMessageHandler; import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade; import net.i2p.router.startup.CreateRouterInfoJob; @@ -346,6 +350,10 @@ public class Router implements RouterClock.ClockShiftListener { SimpleByteCache.clearAll(); Destination.clearCache(); Translate.clearCache(); + Hash.clearCache(); + PublicKey.clearCache(); + SigningPublicKey.clearCache(); + SigUtil.clearCaches(); } /**