0

Unix デーモンはスクリプトをループで実行し、スクリプトは Java プログラムを呼び出します: java {java_args} myClas.jar

Java プログラムは、複数のスレッドを持つ重いプログラムです。

問題は非常に奇妙です。最初の実行は期待どおりに機能します。しかし、2 番目の実行はどこかでスタックしており、理由が見つかりません (これをデバッグするのは非常に困難です)。

最初の実行が終了したときに、まだクリーニングされていないリソースまたはスレッドがこの実行から残っている可能性はありますか?

はいの場合、プロセスが完了した直後にすべてをきれいにして殺すことは可能ですか?

4

1 に答える 1

1

リソースがスレッドを意味する場合は、いいえ。VM がシャットダウンすると、ヒープ上のすべて、すべてのスレッド、オブジェクト、およびモニターが破棄されます。ただし、ロックなどのためにファイルの有無に依存している場合は、デッドロックが発生する可能性があります。また、2 番目のプロセスを起動したときに、最初のプロセスがまだ実行されている可能性はありますか?

2 回目の実行で Java プロセスが動かなくなった場合は、Java プロセスにアタッチjvisualvmして、動かなくなった場所を突き止めることができます。

于 2012-07-13T09:39:55.083 に答える