Я запрограммировал головоломку, в которой используется BufferedImage для каждой части. Это делается потому, что на нем есть тень и маркировка. Когда я совмещаю две части, я создал новый BufferedImage, нарисовал две части на нем и выбросил все ссылки на старые изображения. Моя проблема заключается в том, что при решении головоломки с множеством штук, например, около 100, программа, похоже, накапливает все больше и больше памяти, не запуская сборку мусора, и когда она, наконец, решает очистить, у нее заканчивается память, потому что остальные свободной памяти было слишком мало для запуска мусорной коллекции. Могу ли я сказать сборку мусора, чтобы собирать мусор чаще и во время игры, а не ждать до последнего момента?Обработка мусора в программе Java при производстве мусора
ответ
Возможно, вы по-прежнему сохраняете косвенные ссылки на BufferedImage. Например:
Graphics g = bufferedImg.createGraphics();
bufferedImg = null;
// you still have an indirect reference through the graphics object g!
Кроме того, могут быть родные ресурсы, выделенные с BufferedImage и/или его графики, которые могут (в зависимости от реализации JRE) задержать вывоз мусора из этих объектов. Вы можете намекнуть JRE на освобождение этих ресурсов, вызвав Graphics.dispose() и BufferedImage.flush().
Только объекты, на которые не указаны нигде, имеют право на GC. Так как GC будет всегда запускается прямо перед тем, как JVM умирает с OutOfMemoryError
, это означает, что вы все еще ссылаетесь на объекты, зависящие от памяти, в текущей рабочей области кода. Решение прост: перестаньте ссылаться на них, когда они вам не нужны, или дайте JVM больше памяти для случая, когда вам нужны действительно.
- 1. Сбор мусора Java G1 в производстве
- 2. автоматическая обработка мусора в C++
- 3. Сборщик мусора в Java
- 4. Java - сбор мусора
- 5. обнаружение мусора значение мусора
- 6. Сбор мусора Java 5
- 7. Проблема сборки мусора Java
- 8. Перегрузка мусора, Java
- 9. Несколько сборщиков мусора в java
- 10. java primitives сборщик мусора
- 11. Сценарий сбора мусора Java
- 12. Java-сборщик мусора
- 13. JAVA :: Коды символов мусора
- 14. Мониторинг коллекции мусора Java
- 15. Java: сбор мусора
- 16. Объяснение сборщика мусора Java
- 17. java basics сбор мусора
- 18. Алгоритм сбора мусора Java
- 19. Сбор мусора java
- 20. Java-сканер чтения мусора
- 21. Стратегия сбора мусора Java
- 22. Сбор мусора - Java
- 23. Java-сборщик сборщиков мусора
- 24. Java: сбор мусора
- 25. Время сбора мусора Java?
- 26. Получение выхода мусора Java
- 27. Java большой объект мусора
- 28. Как работает сборщик мусора Java?
- 29. JAVA мусора Коллекция
- 30. Путаница коллекции мусора Java
Похоже, что у вас может быть утечка, а не что-либо еще - это не должно быть проблемой. –