Очистка Кэша

Версия Minecraft
1.7.10
344
1
47
Доброго времени суток, форумчане ^^

Внезапно задался вопросом очистки занятого кэша. Во время игры часто оперативная память, выделенная онной, заполняется и не желает очиститься.

Я как-то копался в мире, на 1.12 и видел это. Увы, сейчас не найду :/ Так вот, встает вопрос - возможно ли сделать очистку кэша или хотя-бы частиный анлоад? По сути, это уже есть в стандартном коде мира, опять же. Но не найду.

Хелп :3

p.s наблюдал такое в оптифайне вроде или что-то в том роде

И, можно ли копаться в этом самом кэше? Допустим, очищать выборочно.
 
344
1
47
Agravaine:

О выделенной оперативной памяти. Она засоряется, используясь... как временная? Стандартная система пытается её очищать, но иногда почему-то перестает. И зависает каждую секунду, так как больше нет оперативы.
 
344
1
47
Это конечно хорошо, но декомпилятора я не имею от слова совсем - свой самописный потерял, а тот же MCR не найти.

:/

Есть аналоги? Мне хотя-бы саму очистку.
 
1,038
57
229
Чувак, ты не понял, ты не можешь контроллировать память в JVM. То что там реализовано скорее всего упрощает сбор мусора (но не избавление от него).
То о чём ты пишешь говорит не о памяти
почему-то перестает. И зависает каждую секунду
Как ты это определил? ты смотрел сколько процессу выделено памяти, смотрел сколько он использует из этого?
То о чём ты пишешь, это кривой код или рассинхрон между сервером.

PS: Сборка мусора
 
Последнее редактирование:
2,505
81
397
Из любопытства глянул.. Это гениально..
Java:
@Mod(modid = "MemoryCleaner", version = "1.0", name = "Memory Cleaner")
public class MemoryCleaner
{
    public static final String MODID = "MemoryCleaner";
    public static final String NAME = "Memory Cleaner";
    public static final String VERSION = "1.0";
    public static long delay;
    public static boolean consoleDebug;
    public static boolean modOn;
    public static Logger log;
    public static Configuration configs;
    public Thread main;
    
    public MemoryCleaner() {
        this.main = new Thread(new Runnable() {
            public Runtime runtime = Runtime.getRuntime();
            
            @Override
            public void run() {
                if (!MemoryCleaner.modOn) {
                    return;
                }
            Label_0006_Outer:
                while (true) {
                    while (true) {
                        try {
                            while (true) {
                                if (MemoryCleaner.consoleDebug) {
                                    MemoryCleaner.log.info("_________________________________");
                                    MemoryCleaner.log.info("Used: " + this.runtime.freeMemory() / 1048576L + "mb of " + this.runtime.maxMemory() / 1048576L + "mb| Used: " + (this.runtime.maxMemory() - this.runtime.freeMemory()) / 1048576L + "mb");
                                    this.runtime.gc();
                                    MemoryCleaner.log.info("Cleaned...");
                                    MemoryCleaner.log.info("Used: " + this.runtime.freeMemory() / 1048576L + "mb of " + this.runtime.maxMemory() / 1048576L + "mb| Used: " + (this.runtime.maxMemory() - this.runtime.freeMemory()) / 1048576L + "mb");
                                }
                                else {
                                    this.runtime.gc();
                                }
                                Thread.sleep(MemoryCleaner.delay * 1000L);
                            }
                        }
                        catch (InterruptedException e) {
                            e.printStackTrace();
                            continue Label_0006_Outer;
                        }
                        continue;
                    }
                }
            }
        });
    }
    
    @Mod.EventHandler
    public void preInit(final FMLPreInitializationEvent event) {
        MemoryCleaner.log = event.getModLog();
        (MemoryCleaner.configs = new Configuration(event.getSuggestedConfigurationFile())).load();
        Property prop = MemoryCleaner.configs.get("general", "delay", 180);
        prop.comment = "Delay to clear the memory in seconds (set to 0 to turn off the mod)";
        MemoryCleaner.delay = prop.getInt((int)MemoryCleaner.delay);
        prop = MemoryCleaner.configs.get("general", "debug", false);
        prop.comment = "Output in console the memory when clear";
        MemoryCleaner.consoleDebug = prop.getBoolean(MemoryCleaner.consoleDebug);
        MemoryCleaner.configs.save();
        if (MemoryCleaner.delay == 0L) {
            MemoryCleaner.modOn = false;
        }
        final MemoryCleaner instance = new MemoryCleaner();
        FMLCommonHandler.instance().bus().register((Object)instance);
        MinecraftForge.EVENT_BUS.register((Object)instance);
    }
    
    @Mod.EventHandler
    public void onServerStartedEvent(final FMLServerStartedEvent event) {
        this.main.start();
    }
    
    @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void onClientConnectedToServer(final FMLNetworkEvent.ClientConnectedToServerEvent event) {
        if (!event.isLocal) {
            this.main.start();
        }
    }
    
    @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public void onClientDisconnectionFromServer(final FMLNetworkEvent.ClientDisconnectionFromServerEvent event) {
        this.main.interrupt();
    }
    
    @Mod.EventHandler
    public void onServerStoppedEvent(final FMLServerStoppedEvent event) {
        this.main.interrupt();
    }
    
    static {
        MemoryCleaner.delay = 180L;
        MemoryCleaner.consoleDebug = false;
        MemoryCleaner.modOn = true;
    }
}
 
Сверху