2011-04-25 20 views
2

所以我需要了解如何爲緩衝屏幕渲染分配內存。顯然有重複,如果你有雙/ tripple /等緩衝。不過,我需要知道什麼時候分配內存以及分配多少內存。非常有幫助我知道是否有多個窗口打開(從同一個jvm啓動)需要多少內存,具體取決於窗口最大化到一個屏幕,多個屏幕(我需要它到多達6個屏幕)等。瞭解Java Swing屏幕緩衝區內存使用情況(請閱讀材料)

有沒有人知道任何好的讀物,或者有關Java Swing/AWT如何爲渲染緩衝區分配內存的答案。

當天結束時,我正在尋找一個明確的公式,以便如果我打開了一些窗口,每個窗口中的緩衝區數量,窗口的位置以及每個窗口的大小,我可以得到一個確切的字節數需要渲染應用程序(只是緩衝部分,其餘的內存是另一個問題)

我假設它是(單緩衝)x由每個窗口=內存要求,但分析數據似乎遠非事實,一些緩衝區是弱/軟引用,一些強,而我無法確定計算方式(還:))。

編輯:我正在使用JFrame對象(好或壞)來做我的頂級的東西。

回答

3

雙緩衝是JPanel的一個便利功能,但總會有一個重要的依賴於平臺的貢獻:每個可見的JComponent都屬於一個重量級對等體,其內存對於JVM是不可訪問的。

如果您試圖避免內存不足,請爲啓動參數選擇合理的值,並指導用戶如何更改它們。 ImageJ就是一個很好的例子。

+0

問題是我需要使用盡可能小的內存。如果我可以在公羊要求上節省50米,那將是非常有用的。客戶可能沒有備用50米的RAM。或者我們希望確保沒有傳呼,如果可能的話。我可能會在我的應用程序中禁用雙緩衝,但我仍然希望能夠估計應用程序的渲染部分應該使用多少內存。 – 2011-04-25 19:01:58

+0

對不起,沒有第一手經驗,但有些實現可以使用視頻卡的RAM。 – trashgod 2011-04-25 19:10:47

+0

我們特意關閉了Java 2D硬件渲染,因爲它造成了問題(我不是那個決定的一部分,但是由於性能問題他們有很好的理由)。 – 2011-04-25 19:12:48

3

我推薦JConsole和Swing源代碼來處理這種精度。

我假設你意識到這將是非常繁瑣的計算,因爲你必須考慮在過程中某處創建的每個對象,這當然取決於UI中涉及的控件。

+0

謝謝。我不需要確切的數字。我更需要以足夠高的逼真度來逼近它,而不是得到確切的數字。如果答案在50到60兆之間,即使是10個月也沒關係。我只需要了解大概多少ram分配給這個整個混亂,儘可能簡單,但不夠小,使應用程序無法在大型顯示器上使用(或至少知道什麼時候增加ram的要求) – 2011-04-25 18:49:03

+1

看起來像一些這些來自JDK的非開源部分。 – 2011-04-25 18:58:44

1

我不知道在Swing中有任何自動屏幕緩衝支持。如果你需要雙緩衝,你需要自己實現,在這種情況下你會更好地知道如何計算內存要求:-)

有關更多信息和良好的指針,請參閱this answer: Java: how to do double-buffering in Swing?

+4

Swing確實提供了一些雙緩衝。 http://java.sun.com/products/jfc/tsc/articles/painting/#db – jzd 2011-04-25 18:55:55

+0

另請參見['public JPanel(boolean isDoubleBuffered)'](http://download.oracle.com/javase/6/文檔/ API /的javax /擺動/ JPanel.html#的JPanel%28boolean%29)。 – trashgod 2011-04-25 18:59:45

+0

一個窗口有能力設置多少緩衝區使用'.createBufferStrategy(numberOfBuffers)'......我正在製作一個數據應用程序,而不是2D遊戲或任何東西。 – 2011-04-25 19:00:23