2

ADAOオブジェクトBを呼び出してデータベースの更新を実行するオブジェクトがある場合-関数が完了すると、 ( )B'sのコールバック関数が呼び出されます。これによりメモリの問題が発生しますか?つまり、完了するまでメモリに残りますか?またはまだGCで削除されますか?AA.finishProcess()BAB

から「結果」オブジェクトまたはコードを返す代わりにコールバックを使用することを検討しているので、これを尋ねますB

要するに、呼び出し元のオブジェクトへのコールバックを使用するよりも、結果のオブジェクトを「返す」方が賢明な設計(およびメモリ使用量)ですか?

PS:特定のものを無視してください。つまり、言及されていませんAsycnTask。私の質問を伝えるための不自然な状況です:)

助けてくれてありがとう

4

3 に答える 3

1

DAOオブジェクトがある場合は、それぞれのコールバック用にクラスを登録します。

コールバックの登録を解除し、クラス内のBクラスの参照を削除するだけです。

以下のようなものです(ここで「b」はクラスBのオブジェクトです)。

b.removeListener(this);
b = null;

これにより、クラスBへの参照が存在しなくなり、GCがメモリからクラスBをクリアすることがJVMに通知されます。

于 2012-06-05T07:29:09.203 に答える
1

それはすべて参照に関するものです。(強力な)参照を保存/保持しない限り(つまり、適切な登録解除、オブジェクトが使用されなくなったら参照をクリアするなど)、オブジェクトはによって適切に処理されるため、心配する必要はありません。 GC。

于 2012-06-05T07:40:37.187 に答える
0

コールバックを使用すると、メモリ使用量の問題が発生すると思います。そうでなければ、私はすでに混乱していると感じています。コードを提供すると、私たちがあなたのアイデアを理解しやすくなります。

IBMがタイトルを付けた、メモリーの問題またはメモリー・リークについてこれまでに読んだ最高の資料は、http://www.ibm.com/developerworks/library/j-leaks/にあります。

配列やリストなどのオブジェクトを取得した場合、可能な場合はできるだけ早くそれを区別するのは簡単です。あなたがそれを呼んだように、私は通常結果オブジェクトに投票します。

于 2012-06-05T07:35:30.430 に答える