了解Java Swing屏幕缓冲区内存使用情况(欢迎阅读材料)

时间:2011-04-25 18:38:26

标签: java swing rendering

所以我需要了解swing如何为缓冲屏幕渲染分配内存。如果你有双重/三重/等缓冲,显然会有重复。但是我需要知道swing什么时候分配内存和多少内存。非常有帮助知道我是否打开了多个窗口(从同一个jvm启动)需要多少内存,具体取决于最大化到一个屏幕的窗口,多个屏幕(我需要它最多可以显示6个屏幕)等等。

有没有人知道任何好读数或者可能有Java Swing / AWT如何为渲染缓冲区分配内存的答案。

一天结束时,我正在寻找一个明确的公式,这样如果我打开了多个窗口,每个窗口中的缓冲区数量,窗口的位置以及每个窗口的大小,我都可以获得所需的精确字节数渲染应用程序(只是缓冲部分,内存的其余部分是另一个问题)

我假设它是(单缓冲)x每个窗口的y = 1个缓冲区,将它们加在一起并且你有所有的内存要求,但是对数据进行分析这似乎远非事实,有些缓冲区很弱/软引用,有些强,我无法确定计算方法(还是:))。

编辑:我正在使用JFrame个对象(无论好坏)来做我的顶级资料。

3 个答案:

答案 0 :(得分:3)

我建议使用JConsole和Swing源代码以达到这种精度。

我假设你意识到这将是非常繁琐的计算,因为你必须考虑在过程中某处创建的每个对象,这当然将取决于UI中涉及的控件。

答案 1 :(得分:3)

双缓冲是JPanel的一个方便功能,但总会有一个重要的平台依赖性贡献:每个可见的JComponent都属于一个重量级的对等体,其内存是JVM无法访问的。< / p>

如果您试图避免内存不足,请为启动参数选择合理的值,并指示用户如何更改它们。 ImageJ就是一个很好的例子。

答案 2 :(得分:1)

我不知道Swing中有任何自动屏幕缓冲支持。如果你需要双缓冲,你需要自己实现它,在这种情况下你会更好地了解如何计算内存需求: - )

有关更多信息和指示,请参阅this answer: Java: how to do double-buffering in Swing?