From c9ef0d2d9a8a06ca5d1d0fed0fabb9460a127017 Mon Sep 17 00:00:00 2001 From: JeremyStarTM Date: Tue, 30 Apr 2024 20:52:53 +0200 Subject: [PATCH] Add gc() function to force garbage collection --- build.gradle | 2 +- src/main/java/de/pickshadow/plugin/Main.java | 2 +- .../pickshadow/plugin/commands/PluginCommand.java | 2 +- .../de/pickshadow/plugin/utils/Miscellaneous.java | 13 +++++++++++++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index cd05a7f..f0b03ba 100644 --- a/build.gradle +++ b/build.gradle @@ -48,4 +48,4 @@ processResources { filesMatching('plugin.yml') { expand props } -} +} \ No newline at end of file diff --git a/src/main/java/de/pickshadow/plugin/Main.java b/src/main/java/de/pickshadow/plugin/Main.java index adfcb54..1bbf953 100644 --- a/src/main/java/de/pickshadow/plugin/Main.java +++ b/src/main/java/de/pickshadow/plugin/Main.java @@ -62,7 +62,7 @@ public final class Main extends JavaPlugin { preinitialized = true; } - // Initialize classes requiring Bukkit API + initialize plugin + // Initialize plugin @Override public void onEnable() { if (failed || !preinitialized) { diff --git a/src/main/java/de/pickshadow/plugin/commands/PluginCommand.java b/src/main/java/de/pickshadow/plugin/commands/PluginCommand.java index a0654f5..0c3aa4e 100644 --- a/src/main/java/de/pickshadow/plugin/commands/PluginCommand.java +++ b/src/main/java/de/pickshadow/plugin/commands/PluginCommand.java @@ -69,7 +69,7 @@ public class PluginCommand extends CommandBase { break; case "gc": sender.sendMessage(Miscellaneous.format(Translation.PLUGINCOMMAND_GARBAGECOLLECT)); - System.gc(); + Miscellaneous.gc(); break; case "playerinfo": if (sender instanceof ConsoleCommandSender) { diff --git a/src/main/java/de/pickshadow/plugin/utils/Miscellaneous.java b/src/main/java/de/pickshadow/plugin/utils/Miscellaneous.java index 38033a6..4bb1325 100644 --- a/src/main/java/de/pickshadow/plugin/utils/Miscellaneous.java +++ b/src/main/java/de/pickshadow/plugin/utils/Miscellaneous.java @@ -26,6 +26,7 @@ import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.jetbrains.annotations.NotNull; +import java.lang.ref.WeakReference; import java.text.DecimalFormat; import java.util.Objects; @@ -48,6 +49,18 @@ public class Miscellaneous { } } + // Ensures garbage collection + // Stolen from JLibs + // https://github.com/santhosh-tekuri/jlibs/blob/e001fb7286c84f456125d1be00fc9a7e3b128881/core/src/main/java/jlibs/core/lang/RuntimeUtil.java#L148 + public static void gc(){ + ObjHolder.logger.warn(Miscellaneous.class, "Forcing garbage collection"); + Object obj = new Object(); + WeakReference ref = new WeakReference<>(obj); + obj = null; + while(ref.get() != null) + System.gc(); + } + // Data type conversion /// Bytes <-> Mebibytes public static double byteToMib(int bytes, boolean flatten) {