2

私の質問はかなり具体的であるため、検索が困難です。私はJavaをプログラミングし、言語を学んでいます。私は実験と呼ばれる 1 つのクラスを設計しました。このクラスでは、すべての実験に共通の関数と既定のパラメーターを定義します。

それぞれの特定の実験 (ExperimentA など) について、Experiment をサブクラス化します。実験 A を実行するたびに、実験 A のインスタンスを作成し、パラメーターをコンストラクターに渡します。コンストラクターは、実験で定義された既定のパラメーターをオーバーライドします。2 つの質問があります。関連する可能性があると思ったので、両方の質問を同じ投稿に投稿しました。

1) 上記の設計は合理的ですか? 最初はインターフェイスを使用したかったのですが、インターフェイスの値は定数でなければならないため、パラメーターをオーバーライドすることは不可能であることがわかりました。

2) パラメータを変更して同じタイプの実験を複数回実行すると、メモリ リークの問題が発生します。

for(int na:ArrayOfIntegers) {
    Experiment e1 = new ExperimentA(na,otherArgs);
    Experiment.runExperiment(e1);
}

何らかの理由で、e1 オブジェクトによって保持されていたオブジェクトは、e1 が新しい ExperimentA オブジェクトに割り当てられた後でもヒープ内に保持されます。これは非常に一般的な質問であることは承知していますが、私は Java を初めて使用するので、何が問題なのかについての推測が役に立ちます。

私が認識している唯一の不正行為は、実験のデフォルト変数をプライベートではなくパブリックにしてゲッターを使用することですが、このコンテキストでそれがどのように問題を引き起こすかわかりません。基本的に、runExperiment() 関数が実行され、別の ExperimentA オブジェクトが作成された後は、e1 オブジェクトへの参照はありません。何か案は?

4

2 に答える 2

0

クラスExperimentは静的であり、そのメソッドに渡しますe1

の内容はrunExperiment?たとえば、パラメーターを配列に格納するコードはありますか?

作成されたオブジェクトへの参照がある場合、ガベージ コレクションは実行できません。Experimentは静的ですが、その内部構造には、すでに行われて破棄された実験をクリーンアップするための管理ルーチンが必要であると思います。

于 2013-08-06T14:06:04.140 に答える