0

オブジェクト指向プログラミング初心者です。画面のさまざまなサイズの長方形をさまざまな間隔でキャプチャする静的メソッドを使用してクラスを作成しました。キャプチャは、静的 Robot インスタンスを使用して静的 BufferedImage に保存されます。

myStaticBufferedImage = myStaticRobot.createScreenCapture(arbitrarySizeRectangle);

データに対して一部の操作が実行されます (イメージを bmp ファイルに書き込む場合もある)。次のキャプチャでは、前のキャプチャの画像データは必要ありません。

bufferedImage には画面解像度の最大サイズまでの可変サイズのデータ​​が含まれるため、アプリケーションが使用を開始する前にそのように宣言する必要がありますか?

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

これにより、画像を繰り返しキャプチャするときに、リークや非効率性なしに再利用可能なチャンクがメモリに割り当てられますか? それとも、createScreenCapture メソッドを使用するたびにメモリがいっぱいになり、myStaticBufferedImage に新しいポインタを割り当てるだけですか?

このアプリは、CPU を集中的に使用するソフトウェアと一緒に OSX Lion で実行しています。メモリ管理のベストプラクティスは何ですか? ありがとう!

4

1 に答える 1

0

myStaticBufferedImage最大解像度に初期化しないでください。メモリ内にcreateScreenCapture()独自のものを作成し、それを参照します。からのバッファを使用することは決してありません。BufferedImagemyStaticBufferedImagecreateScreenCapture()myStaticBufferedImage

とはいえ、数BufferedImage個の のみを作成する場合は、非常に CPU を集中的に使用する (メモリを集中的に使用する?) ソフトウェアと比べて、おそらく違いはありません。

于 2011-12-11T08:23:57.103 に答える