0

我是面向对象编程的新手。我用静态方法创建了一个类,该方法以不同的时间间隔捕获屏幕上各种不同大小的矩形。捕获使用静态 Robot 实例存储在静态 BufferedImage 中:

myStaticBufferedImage = myStaticRobot.createScreenCapture(arbitrarySizeRectangle);

对数据执行一些操作(包括偶尔将图像写入 bmp 文件)。在下一次捕获时,不需要来自先前捕获的任何图像数据。

由于 bufferedImage 将包含可变大小的数据,直到我的屏幕分辨率的全尺寸,我应该在我的应用程序开始使用它之前声明它吗?

private static BufferedImage myStaticBufferedImage = new BufferedImage(RESOLUTION_X, RESOLUTION_Y, APPROPRIATE_IMAGE_TYPE);

当我重复捕获图像时,这是否会在内存中分配一个可重用的块而没有任何泄漏或效率低下?还是每次我使用 createScreenCapture 方法时都会填充越来越多的内存并简单地为 myStaticBufferedImage 分配一个新指针?

我在 OSX Lion 上运行这个应用程序以及一些 CPU 密集型软件。内存管理的最佳实践是什么?谢谢!

4

1 回答 1

0

您不应初始化myStaticBufferedImage为最大分辨率。createScreenCapture()将在内存中创建自己BufferedImage的,然后myStaticBufferedImage将被引用。在任何情况下都不会createScreenCapture()使用来自myStaticBufferedImage.

也就是说,如果您只创建几个BufferedImages,它可能不会在 CPU 密集型(内存密集型?)软件旁边产生影响。

于 2011-12-11T08:23:57.103 回答