2017-01-05 22 views
0

シェルスクリプトを使用して無限回のJavaコードを実行したいと考えています。そしてそれのために私は2つのオプションがあります。無限ループ:Javaまたはシェルスクリプト

  1. 無限のJavaクラスのコード内のwhileループwhileループ
  2. 無限を使用して、シェルスクリプトでJavaクラスを呼び出し、それを行うには良い方法であるどのシェルスクリプトで一度

をJavaクラスを呼び出しますか?

+1

あなた自身の意見はありませんか? –

+0

javaを使用すると、これらのコマンドをファイルに書き込むことによって実行されたコマンドを追跡できます。後でデバッグに役立つかもしれません – Abhishek

+3

これは依存しています。それ以外のものはすべて同じであるため、シェルに戻り、毎回Javaを呼び出す必要はないので、Javaのループは最初は最も魅力的なようです。 –

答えて

5

技術の事実基づいて回答:

あなたのシェルスクリプトでループを持つあなたは常に新しいJVMプロセスを開始しておくことを意味します。これにより、実行しているJavaプログラム内にループがある場合と比較して、システムに負荷がかかります。

つまり、1つのJVMセッションを開始します。それは落ちる。次は永遠に始まる。

おそらく、Linuxは、(実際には物事をメモリに保存することによって)そうするコストを削減するカバーの背後にある多くのことをやっているでしょう。しかしそれでも、あなたはすぐにプロセスを開始して、すぐにプロセスを終了します。

「無限」の時間にコードを実際に実行する予定がある場合は、どのような形でもリソースを無駄にしないようにしたいと思うよりも、

これは、スクリプト側でループを維持するための(弱い)引数を与えることができます:あなたのループをあなたのJavaコードに入れ、あなたのJavaコードが実際にはバグです(メモリリークなど)。その1つのJVMのメモリー消費量は永遠に(その限界に達するまで)増加し続ける可能性があり、ガーベッジ・コレクションが多数発生する可能性があります。

意味:Javaコードの形が悪いことがわかっている場合。より長い時間にわたって同じ JVMで実行すると問題が発生します。もちろん、JVMの起動と停止にはいくつかの利点があります。 もちろん、その場合は、とにかく大きな問題があります。 Javaアプリケーションにこのような問題がある場合は、その根本原因を特定して修正することをお勧めします。これらの問題を回避するためにJVMを常に開始/停止する代わりに、

+0

あなたの答えをありがとう。しかし、私は質問があります。一定期間後にメモリ(RAM)の問題に影響を及ぼしますか? –

+0

あなたはあなたのループをスクリプトに入れておくとどういう意味ですか?いいえ、私はそうは思わない。 – GhostCat

+0

いいえ、私はJavaプログラム内でループを保つことを意味します。 JVMは各ループ実行時にメモリを割り当てるためです。私が間違っているなら、私を訂正してください。 –

0

間隔を気にしなかった場合、 'watch'コマンドを使用するとどうなりますか?
あなたはその後、あなたのコマンドは2秒で更新されますあなたは間隔を変更したい場合は、あなたが5 {あなたのコマンド}
-n
時計を入力して次に間隔がある
時計{あなたのコマンド}
を入力して5秒間は、出力値を監視している場合には利口です。終了するには、CTRL + Cキーを使用します。

関連する問題