The bug
Minecraft never deletes textures of the skins, causing it to stay loaded forever.
How to reproduce
Log in into any multiplayer server/give yourself bunch of player heads
Log off
Reload resources (optionally, just to provde that it does not solve the problem)
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]
This bug still present in 20w27a?