Solved This is somehow a memory leak?

Discussion in 'Plugin Development' started by Tecno_Wizard, Jul 23, 2016.

Thread Status:
Not open for further replies.
  1. Offline

    Tecno_Wizard

    This has to be one of the weirdest issues I have ever come across coding next to a rounding error.
    Reading all of the keys off a properties file with 2 entries is somehow creating an infinite loop. Anyone? (Line numbers are intact)

    EDIT: Okay, I'm an idiot. The keyset is a clone. Who decided that was a good idea?

    Code:
    package com.ethanzeigler.bukkit_plugin_utils.language;
    
    import java.text.MessageFormat;
    import java.util.Enumeration;
    import java.util.MissingResourceException;
    import java.util.ResourceBundle;
    
    import static sun.print.ServiceDialog.getMsg;
    
    /**
    * Created by Ethan on 7/14/16.
    */
    public class I18N implements MessageProvider {
        private ResourceBundle messages;
        private Language lang;
        private MessageFormat formatter;
    
        public I18N(ClassLoader classLoader, Language lang) throws MissingResourceException {
            this.lang = lang;
            formatter = new MessageFormat("", lang.getLocale());
    
            messages = ResourceBundle.getBundle(
                    lang.getResourceBundleBase(), lang.getLocale(), classLoader);
        }
    
        @Override
        public String get(String key) {
            return messages.getString(key);
        }
    
        @Override
        public String getAndFormat(String key, Object... replacements) {
            return format(getMsg(key), replacements);
        }
    
        private String format(String input, Object... replacements) {
            formatter.applyPattern(input);
            return formatter.format(replacements);
        }
    
        public void printAllKeys() {
            StringBuilder sb = new StringBuilder();
            System.out.println(messages.getBaseBundleName() + messages.getLocale());
            Enumeration<String> keys = messages.getKeys();
            while (keys.hasMoreElements()) {
                sb.append(messages.getKeys().nextElement() + ",");
            }
            System.out.println(sb.toString());
            System.out.println("Done");
    
        }
    
        public Language getLanguage() {
            return lang;
        }
    }
    
    Code:
    java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Arrays.java:3332) ~[?:1.8.0_91]
        at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:137) ~[?:1.8.0_91]
        at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:121) ~[?:1.8.0_91]
        at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:421) ~[?:1.8.0_91]
        at java.lang.StringBuilder.append(StringBuilder.java:136) ~[?:1.8.0_91]
        at com.ethanzeigler.bukkit_plugin_utils.language.I18N.printAllKeys(I18N.java:46) ~[?:?]
        at com.ethanzeigler.bukkit_plugin_utils.language.LanguageManager.<init>(LanguageManager.java:39) ~[?:?]
        at com.ethanzeigler.bukkit_plugin_utils.PluginCore.<init>(PluginCore.java:37) ~[?:?]
        at com.ethanzeigler.tactical_insertions.TacticalInsertions.onEnable(TacticalInsertions.java:55) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:292) ~[spigot.jar:git-Spigot-a9631d2-67b2424]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot.jar:git-Spigot-a9631d2-67b2424]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot.jar:git-Spigot-a9631d2-67b2424]
        at org.bukkit.craftbukkit.v1_10_R1.CraftServer.loadPlugin(CraftServer.java:362) [spigot.jar:git-Spigot-a9631d2-67b2424]
        at org.bukkit.craftbukkit.v1_10_R1.CraftServer.enablePlugins(CraftServer.java:322) [spigot.jar:git-Spigot-a9631d2-67b2424]
        at net.minecraft.server.v1_10_R1.MinecraftServer.t(MinecraftServer.java:417) [spigot.jar:git-Spigot-a9631d2-67b2424]
        at net.minecraft.server.v1_10_R1.MinecraftServer.l(MinecraftServer.java:382) [spigot.jar:git-Spigot-a9631d2-67b2424]
        at net.minecraft.server.v1_10_R1.MinecraftServer.a(MinecraftServer.java:337) [spigot.jar:git-Spigot-a9631d2-67b2424]
        at net.minecraft.server.v1_10_R1.DedicatedServer.init(DedicatedServer.java:270) [spigot.jar:git-Spigot-a9631d2-67b2424]
        at net.minecraft.server.v1_10_R1.MinecraftServer.run(MinecraftServer.java:540) [spigot.jar:git-Spigot-a9631d2-67b2424]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_91]
     
    Last edited: Jul 23, 2016
Thread Status:
Not open for further replies.

Share This Page