Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
Model Engine 4 Model Engine 4
  • Project overview
    • Project overview
    • Details
    • Activity
  • Issues 110
    • Issues 110
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Create a new issue
  • Issue Boards
Collapse sidebar
  • MythicCraft
  • Model Engine 4Model Engine 4
  • Issues
  • #187

Closed
Open
Created Feb 17, 2025 by Luca Améaume@LuluxClient

BIG MEMORY LEAK [URGENT]

When a world unloads meg doesn't remove ANYTHING, this was fun until couple updates ago where you removed some methods that allowed us to do it. Without removing everything from MEG on the world unload it causes huge memory leaks and ends up crashing at the end.

This was the method I was using before and if you need a .hprof or a speark heapsummary I'll gladly send one in private DMs. (My discord: xdLulux)

Method I used that worked until now:

  int entityCount = 0;
        for (EntityDataTrackers.Tracker tracker : ModelEngineAPI.getAPI().getDataTrackers().getAvailable()) {
            for (Map.Entry<UUID, IEntityData> entry : tracker.getDataTrackers().entrySet()) {
                IEntityData entityData = entry.getValue();
                if (entityData.getLocation().getWorld().getName().equalsIgnoreCase(bukkitWorld.getName())) {
                    this.plugin.getLogger().warning("Found IEntityData " + entry.getKey() + " in world " + bukkitWorld.getName() + " in EntityTracker.");
                    tracker.removeEntityData(entry.getKey());
                    entityCount++;
                }
            }
        }
        this.plugin.getLogger().info("Removed " + entityCount + " IEntityData from world " + world.getName());

        int modelCount = 0;
        for (ModelUpdaters.Updater updater : ModelEngineAPI.getAPI().getModelUpdaters().getAvailable()) {
            for (UUID modelUUID : updater.getAllModeledEntityUUID()) {
                ModeledEntity modeledEntity = updater.getModeledEntity(modelUUID);
                if (modeledEntity.getBase().getLocation().getWorld().getName().equalsIgnoreCase(bukkitWorld.getName())) {
                    this.plugin.getLogger().warning("Found ModeledEntity " + modelUUID + " in world " + bukkitWorld.getName() + " in ModelUpdater.");
                    updater.removeModeledEntity(modelUUID);
                    modelCount++;
                }
            }
        }
        this.plugin.getLogger().info("Removed " + modelCount + " ModeledEntity from world " + world.getName());
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking