我正在製作一個Java程序。 它涉及到尺寸高達9933 * 14043像素(這是A0尺寸和300 PPI)的圖像。圖像是24位,所以它將佔用大約400mb的空間。 BufferedImage類一些如何比位圖的實際大小佔用更多的RAM,所以圖像將佔用大約600 MB的RAM。 使用其他數據時,應用程序在渲染大圖時最多需要700 mb的內存。到目前爲止,我還沒有遇到任何問題。但是,如果最終用戶沒有足夠的可用內存,則JVM將無法爲位圖分配內存,並會拋出OutOfMemoryError。我應該在我的Java程序中使用多少內存?
那我該怎麼辦?
我想出了:
- 捕獲錯誤並拋出提示給用戶。
- 等一段時間,直到這裏有足夠的內存。如果等待時間過長,則會提示。
- 編寫我自己的位圖類,並用FileOutputStream部分編寫圖像。 .bmp格式不是非常複雜。 (實際上,我已經寫了大部分內容並進行了優化。)通過部分渲染位圖,整個圖像不必留在RAM中。可根據可用內存大小動態更改部件的大小。然而這是重新發明輪子並且需要大量工作。此外,涉及文本的圖像部分必須放置在BufferedImage中,然後轉換爲我的類(因爲我不想查看真正的字體格式)。無論如何,如果Java BufferedImage類在我的情況下工作,我不會這樣下去。
使用'-Xmx'標誌增加內存限制有什麼問題嗎? –
從OutOfMemoryError中恢復並不可靠。因此,在一段時間後重試它可能會產生意想不到的結果。 –
通過等待一段時間,我的意思是使用Runtime.freeMemory()方法來查找可用內存,直到可用內存量大於所需內存爲止。 –