Details
-
Type:
Bug
-
Status: Open
-
Resolution: Unresolved
-
Affects Version/s: 1.15.2, 20w21a, 20w22a, 1.16 Pre-release 1, 1.16 Pre-release 2, 1.16 Pre-release 3, 1.16 Pre-release 5, 1.16 Pre-release 6, 1.16 Release Candidate 1, 1.16, 1.16.1, 20w27a, 20w28a, 20w29a, 20w30a, 1.16.2 Pre-release 1, 1.16.2 Release Candidate 1, 1.16.2 Release Candidate 2, 1.16.2, 1.16.3 Release Candidate 1, 1.16.3, 1.16.4 Pre-release 1, 1.16.4 Pre-release 2, 1.16.4 Release Candidate 1, 1.16.4, 20w46a, 20w48a, 20w51a, 21w03a, 1.16.5, 21w05a, 21w05b, 21w06a, 21w07a
-
Fix Version/s: None
-
Labels:
-
Confirmation Status:Confirmed
-
Category:Performance
-
Mojang Priority:Normal
Description
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: