コマンドラインから特定のプロセスを直接開始すると、2-3秒で完全に起動します。Java process.startは、親プロセスが起動しても破壊されない場合、非常に遅くなります
Javaプログラムからまったく同じコマンドで全く同じプロセスを開始すると、親プロセスが破棄されない限り、起動時にハングアップします。どうして? ProcessBuilderをして
:Runtime.execので
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(new File(dir));
Process p = pb.start();
:
Runtime.getRuntime().exec(cmd, null, new File(dir));
私は、すぐにガベージコレクタをゼロにして呼び出すために新しいプロセスを新しいプロセスオブジェクトを設定しない場合はいずれかの方法3秒以内にやるべきことと同じことをするのに3分かかります。
Process p = pb.start();
p = null;
Runtime.getRuntime().gc();
上記のコードを使用して問題を解決します。誰かがなぜ私を説明することはできますか?私はそれがJVMにプロセスの処理に関連するものだと思いますが、それは単なる推測です。
新しいプロセスは、Hibernateを使用してMySQL DBに接続し、log4jでログファイルを書き込み、.propertiesファイルから読み取り、RabbitMQサーバーに接続します。
は
は、Javaアプリケーションから外部プログラムを実行すると、権利を取得するために悪名高いトリッキーです
ありがとうございますが、私は代替案を探しているわけではありません。なぜそれが起こるのか不思議です。 – grog