我已經編寫了一個拼圖遊戲,每個遊戲塊都使用了BufferedImage。這是因爲它具有特定的陰影並在其上標記。 當我合併兩個部分時,我創建了一個新的BufferedImage,在它上面繪製兩個部分,並將所有對舊圖像的引用都扔掉。 我的問題是,在解決許多碎片像100個左右的難題時,程序似乎堆積了越來越多的內存而沒有運行垃圾回收,並且當它最終決定清理時,由於剩餘內存可用內存太少,垃圾收集無法運行。 有沒有什麼辦法可以讓垃圾收集更頻繁地收集垃圾,並且在遊戲過程中而不是等到最後一刻?處理Java程序中的垃圾收集,同時產生大量垃圾
0
A
回答
0
您仍然可以持有對BufferedImage的間接引用。例如:
Graphics g = bufferedImg.createGraphics();
bufferedImg = null;
// you still have an indirect reference through the graphics object g!
而且,有可能是BufferedImage的和/或它的圖形,它可以(根據實施JRE)延遲這些對象的垃圾收集分配的本機資源。您可以通過調用Graphics.dispose()和BufferedImage.flush()來提示JRE釋放這些資源。
1
只有在任何地方未被引用的對象纔有資格使用GC。由於GC將總是在JVM與OutOfMemoryError
一起死亡之前運行,這意味着您仍在引用當前正在運行的代碼作用域中的內存佔用對象。解決方案很簡單:在不需要它們時停止引用它們,或者在您需要它們的情況下爲JVM提供更多內存。
相關問題
- 1. 垃圾收集java
- 2. Java垃圾收集
- 3. Java垃圾收集
- 4. Java垃圾收集時間?
- 5. 垃圾收集
- 6. 的Java newSingleThreadExecutor垃圾收集
- 7. 數量的垃圾收集
- 8. 垃圾收集在產量的方法
- 9. IServiceProvider垃圾收集/處置
- 10. 垃圾收集YGCT和垃圾收集時間不斷上升
- 11. AS3:垃圾收集太大?
- 12. Java垃圾收集問題
- 13. Java垃圾收集和空
- 14. Java垃圾收集算法
- 15. Java垃圾收集場景
- 16. 過量垃圾收集?
- 17. DoctrineCommonCache垃圾收集?
- 18. 垃圾收集器
- 19. C#垃圾收集
- 20. WeakEvent垃圾收集
- 21. GWT垃圾收集
- 22. 圖像處理呼叫垃圾收集
- 23. 臨時表垃圾收集
- 24. Java垃圾收集和大對象
- 25. java垃圾回收
- 26. Java:垃圾回收
- 27. java - 垃圾回收
- 28. Java:垃圾回收
- 29. bash中的垃圾收集
- 30. C#中的垃圾收集#
這聽起來像你實際上可能有泄漏,而不是其他任何東西 - 它不應該是一個問題。 – 2010-09-26 18:12:49