2011-04-25 78 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