2009-06-24 9 views
1

Javaプログラムを順番に呼び出すbashスクリプトがあります。それは少しトリッキーですが、主に私はループを持つことで、同じ引数を持つ同じjavaプログラムを約1500回実行します。Javaプログラムの順次実行== jvmの順次起動?

私の質問は、Java 1.5(Sun VM)を使用しているときに、私がJavaプログラムを呼び出すたびに、jvmの新しいインスタンスが作成されるということですか? (私はそれが正しい語彙であるかどうか分かりません...)

間接的なレベルを導入することによって、つまりすべてのパラメータのリストを作成し、これらのパラメータをとり実行する1つのJavaプログラムを実行することで、以前私のエントリーポイントは何でしたか?

または私はそのような居住者か何かのようにJVMを設定することで、問題に対処し、動的に私のプログラムを呼び出すことができます....

希望、これは明らかです....

THX ...

+0

はい、JVMの起動がプログラムの実際の実行時間を矮小化しない場合、私は非常に驚くでしょう。 –

+0

私も来ました。私が来る前にそこにいて、本当に悪いパフォーマンスと戦っています...それは良い出発点です – LB40

答えて

4

ファイルにパラメータを保存し、Javaプログラムを使用して定数を再起動しなくても処理できます。 ls | grep javals | grep java

編集:のように、実行中のJavaアプリケーションにパラメータをパイプすることもできます。私は、Javaランタイムが故意にメモリに留まるのではないかと疑う。おそらくほとんどのJREファイルはとにかくディスクキャッシュに残っているでしょう。 Windows上には、Javaプログラムの起動時間を短縮するためにJREファイルを保持するJavaクイックスタートサービスがあります。 * nixに似たものがあるかどうかは分かりません。

+0

これは実際に私がやっていることです... – LB40

1

明らかに、すべてのパラメータを事前に設定しておけば、そのプログラムを一度実行すると最適な解決策になります。あなたが何らかの理由でそれを行うことができないなら、私はこれに非常に汚い解決策を持っています。あなたのプログラムにポートを登録させて、入力のためにそれを聞いてください。次に、そのポートに引数を渡して、あなたのプログラムがそれらを新しいインスタンスとして扱わせるようにします。

1

JVMの起動が非常に遅いことはよく知られており、そのようなループでは実行されないことは確かです。残念なことに、コマンドラインパラメータをjavaプログラムに渡す場合、これを避ける唯一の方法は、Javaプログラム自体を何らかの方法で変更して(コンソールやポートから、あるいはファイルを読み込んで) 。 Javaプログラムを変更できない場合、Javaクイックスタートは唯一の解決策です。

本当の解決策は、Javaプログラムを変更することです。最も明白な変更は、あなたのループをファイルに書き込ませてから、一度に1行ずつファイルを読み込むJavaプログラムを起動することです。これは、ループが次のパラメータセットのJavaプログラムからの結果を気にしない場合に機能します。

もしそうなら、適切な解決法について助言するためには、その関係を理解することが本当に必要になります。 Savvasによって提案されたソケットソリューションは汎用ソリューションではありますが、達成する必要があるものに応じて、より良いオプションがあるかもしれません。