mojira.dev
MC-186052

Client leaks GPU / OS memory when reloading textures

The bug

Minecraft never deletes textures of the skins, causing it to stay loaded forever.

How to reproduce

  1. Log in into any multiplayer server/give yourself bunch of player heads

  2. Log off

  3. Reload resources (optionally, just to provde that it does not solve the problem)

  4. Acquire heap dump: textures remain loaded

Affects all Minecraft versions starting at least from 1.12.x.

Code analysis

When textures are reloaded (official mappings are used), net.minecraft.client.renderer.texture.TextureManager releases all textures it has, but never deletes skins, because their textures are not missing, causing them to load back in.
 

while (iterator.hasNext()) {
                entry = iterator.next();
                resourceLocation = entry.getKey();
                abstractTexture = entry.getValue();
                if (abstractTexture == MissingTextureAtlasSprite.getTexture() && !resourceLocation.equals(MissingTextureAtlasSprite.getLocation())) {
                    iterator.remove();
                }
                else {
                    abstractTexture.reset(this, resourceManager, resourceLocation, executor2);
                }
            }

Heap screenshot:

[media]

Attachments

Comments 4

This bug still present in 20w27a?

Affects 1.19 pre-4

__xDark

(Unassigned)

Confirmed

Platform

Normal

Performance

client, memory-leak, mojang_internal_1

1.15.2, 20w21a, 20w22a, 1.16 Pre-release 1, 1.16 Pre-release 2, ..., 21w11a, 1.17 Pre-release 2, 1.17.1, 22w11a, 1.19 Pre-release 4

Retrieved