この種のアプリを作成するときに心に留めておかなければならなかったすべてのことのブレイン ダンプです。
メモリ リークを回避する
毎日正午に 1 回実行されるアプリがあり、その中にFileWriter
. 私はそれを適切にクローズしていなかったので、仮想マシンが数週間後になぜメルトダウンするのか疑問に思うようになりました. メモリ リークは、実際にはあらゆる形で発生する可能性があります。最も一般的な例の 1 つは、de-reference
適切にオブジェクトを作成していないことです。たとえば、クラスのフィールドを一時ストレージの方法として使用します。多くの場合、クラスは存続し、参照も存続します。これにより、オブジェクトが残り、メモリに座って何もしなくなります。
適切な種類のスケジューラを使用する
私はそのアプリで Java を使用しましたが、後で、別のアプリがシステム クロックを変更しているときにScheduledThreadPoolExecutorTimer
を使用する方がよいことを知りました。したがって、完全にJavaベースのままにする予定がある場合は、この質問で説明されているすべての理由から、タイマーよりもそれを使用することを強くお勧めします.
メモリ使用量と環境に注意してください
アプリが毎日大量のデータを読み込んでいて、同じサーバーで他のアプリを実行している場合は、タイミングに注意する必要があります。たとえば、正午に 3 つのアプリがスケジュールされた操作を実行するとします。それ以外の時間に実行するのはおそらく賢明な方法です。コードを実行する環境に注意してください。
エラー処理
おそらく、何か問題が発生した場合に、アプリを壊さずに通知するようにアプリを構成する必要があります。数時間ごとの特定の時間に実行されている場合、それはおそらく人々がそれに依存していることを意味します。そのため、例外の性質を詳述する電子メールを送信する関数を Java コードに含めることができます。
構成可能にする
繰り返しになりますが、1 日のさまざまな時点で実行する必要がある場合は、コードに小さな変更を加えるために数時間もプルダウンする必要はありません。代わりに、Java プロパティ ファイル、または XML 構成 (または実際には何でも) に移植します。これの利点は、プログラムを更新して、実際に違いに気付く前に起動して実行できることです。
static
キーワードが怖い
その悪い男の子は、親参照を破棄しても、オブジェクトを存続させます。注意しないと、すべてのメモリ リークの元になります。定数については問題ありませんが、変更する必要がなく、プロジェクト内に存在する必要がないことがわかっているものは正常に実行されますが、プロジェクト内のランダムな値に使用している場合は、なぜあなたのではなく、数時間ごとにアプリがクラッシュしsyncing
ます。
そのことを思い出させてくれた@ X86への小道具。