2

次のコードのPMD レポートNullAssignment、それを修正するためのベスト プラクティスは何ですか?

オブジェクトを null に割り当てるのはコードの匂いです。リファクタリングを検討してください。

次のコードは私が書いたものではありません。一時的なタイマー インスタンスを作成し、このインスタンスをタイマーに割り当てる理由についても質問があります。マルチスレッドコンテキストで使用されますstartTimerstopTimer

private Timer timer;

private void startTimer() {
    if (timer == null) {
        Timer aTimer = timerService.createTimer(DEFAULT_TIMER_VALUE, null);
        aTimer.setListener(this);
        timer = aTimer;
    }
}

private void stopTimer() {
    if (timer != null) {
        Timer aTimer = timer;
        timer = null;
        aTimer.cancel();
        aTimer.setListener(null);
    }
}

public void start() {
  synchronized(..) {
     startTimer();
  }
}

public void stop() {
  synchronized(..) {
     stopTimer();
  }
}
4

3 に答える 3

1

nullこのコードは、に設定された参照がより高速にガベージ コレクションされるという誤った考えで記述されています。

したがって、PMD からのメッセージは、この誤った信念がコード化されたということです。

ガベージ コレクターはメモリが使い果たされたときに実行され、参照が残っていないすべてのオブジェクトを収集するため、これは間違った想定です。

を呼び出してもSystem.gc()、ガベージ コレクターは実行されません。この呼び出しはガベージ コレクタへのヒントにすぎませんが、ガベージ コレクタが十分な空きメモリが利用可能であると判断すると、実行されません。

于 2013-07-11T10:25:16.690 に答える