簡體   English   中英

我應該在Java程序中使用多少內存?

[英]How much memory should I use in my Java program?

我正在制作一個Java程序。 它涉及制作尺寸高達9933 * 14043像素(A0尺寸和300 ppi)的圖像。 圖像為24位,因此占用大約400mb的空間。 BufferedImage類有些如何占用比位圖實際大小更多的RAM,因此圖像將占用大約600 MB的RAM。 使用其他數據時,應用程序在渲染大圖像時最多會占用大約700 mb的RAM。 到目前為止我沒有任何問題。 但是,如果最終用戶沒有足夠的可用內存,則JVM將無法為位圖分配內存並將拋出OutOfMemoryError。

所以我該怎么做?

我想出了一些東西:

  1. 捕獲錯誤並向用戶拋出提示。
  2. 等一段時間,直到這里有足夠的記憶。 如果等待的時間太長,請提示。
  3. 編寫我自己的位圖類,並使用FileOutputStream按部分編寫圖像。 .bmp格式並不十分復雜。 (實際上我已經編寫並優化了大部分內容。)通過部分渲染位圖,整個圖像不必保留在RAM中。 可以根據可用的內存大小動態更改部件的大小。 然而,這有點重新發明輪子並需要大量的工作。 此外,涉及文本的圖像部分必須放入BufferedImage,然后轉換為我的類(因為我不想查看真正的字體格式)。 無論如何,如果Java BufferedImage類在我的情況下工作,我不會這樣做。

我懷疑現在任何人都不到一陣公羊。 因此,您可以檢查用戶是否有足夠的內存與Runtime.getRuntime().maxMemory() ,如果他們不只是顯示錯誤並關閉。 這是一個在出現錯誤時使用JOptionPane的示例:

long memory = Runtime.getRuntime().maxMemory(); //in bytes
long required = 700 * 1024 * 1024; //700MB, in bytes
if(memory < required) {
    JOptionPane.showMessageDialog(null, "You don't have enough memory. (700MB required)", "Error", JOptionPane.ERROR_MESSAGE);
    System.exit(0);
}

maxMemory()返回JVM將嘗試使用的最大內存量(以字節為單位)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM