- 214
- 11
- 59
В 1.13 на смену BufferedImage пришел майновский NativeImage и мне изначально показалось, что здесь не может быть никаких проблем, но как бы не так.
Мой код подгружает несколько изображений на игрока из интернетов и при помощи DynamicTexture регистрирует их в игре. И если раньше(1.12.2) такой код почти не оказывал сильного влияния на память, то с пришествием 1.13 начался ад. Отныне жрется от 6 до 40мб на один экземпляр DynamicTexture, в зависимости от качества картинки(использую весом до 200кб). Мало того, это память теперь еще и не хочет чиститься GC. Даже если вызвать close(), GC не скоро удаляет такие объекты и за процессом при 10-20 загрузках на минуту висит от 1гб лишней памяти...
Прошу помощи у знающих людей, ибо сам уже отчаялся. Не хочется изобретать свою NativeImage
Важно: проблема точно определена. Тот же код, но на базе BufferedImage работает исправно.
Мой код подгружает несколько изображений на игрока из интернетов и при помощи DynamicTexture регистрирует их в игре. И если раньше(1.12.2) такой код почти не оказывал сильного влияния на память, то с пришествием 1.13 начался ад. Отныне жрется от 6 до 40мб на один экземпляр DynamicTexture, в зависимости от качества картинки(использую весом до 200кб). Мало того, это память теперь еще и не хочет чиститься GC. Даже если вызвать close(), GC не скоро удаляет такие объекты и за процессом при 10-20 загрузках на минуту висит от 1гб лишней памяти...
Прошу помощи у знающих людей, ибо сам уже отчаялся. Не хочется изобретать свою NativeImage
Важно: проблема точно определена. Тот же код, но на базе BufferedImage работает исправно.
Java:
for (int i = 0; i < 30; i++) {
ResourceLocation res = new ResourceLocation("cornell_test_" + i);
NativeImage image;
try {
image = MinecraftUtils.readNativeImage(new URL("my_url").openStream());
DynamicTexture dynamicTexture = new DynamicTexture(image);
Minecraft.getMinecraft().getTextureManager().loadTexture(res, dynamicTexture);
} catch (IOException e) {
e.printStackTrace();
}
}
Последнее редактирование: