所以我需要了解swing如何为缓冲屏幕渲染分配内存。如果你有双重/三重/等缓冲,显然会有重复。但是我需要知道swing什么时候分配内存和多少内存。非常有帮助知道我是否打开了多个窗口(从同一个jvm启动)需要多少内存,具体取决于最大化到一个屏幕的窗口,多个屏幕(我需要它最多可以显示6个屏幕)等等。
有没有人知道任何好读数或者可能有Java Swing / AWT如何为渲染缓冲区分配内存的答案。
一天结束时,我正在寻找一个明确的公式,这样如果我打开了多个窗口,每个窗口中的缓冲区数量,窗口的位置以及每个窗口的大小,我都可以获得所需的精确字节数渲染应用程序(只是缓冲部分,内存的其余部分是另一个问题)
我假设它是(单缓冲)x每个窗口的y = 1个缓冲区,将它们加在一起并且你有所有的内存要求,但是对数据进行分析这似乎远非事实,有些缓冲区很弱/软引用,有些强,我无法确定计算方法(还是:))。
编辑:我正在使用JFrame
个对象(无论好坏)来做我的顶级资料。
答案 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?。