3

Java プラグインでの無限ループを防止し、実行されるステートメントの数に制限を設けたいと考えています。多くの Java プロファイリング ツールを調べましたが、Java クラスが実行されているため、完了後に統計を取得するのではなく、これを追跡する明確な方法はありません。

私たちは jProfiler を認識しており、これはオプションではありません。なぜなら、最小限のオーバーヘッドで何千もの個別のクラスを追跡する必要があり、これをすべてコードで行う必要があるため、実行中の特定のクラスが事前設定された制限を超えた場合に強制終了できるからです。 .

ありがとう!

4

4 に答える 4

3

Yourkit や JProfiler などのプロファイラーは役に立ちません。実際には何も役に立ちません。特定の Java クラスが使用するメモリの量を制限できないのと同様に、CPU を制限することはできません。基本的に、すべてのクラスが同じ CPU/スケジューラとメモリ空間を共有します。

プラグイン クラスを別の優先度の低いスレッドで実行し、プラグインが完了するまで一定時間待つことができます。残念ながら、(たとえば無限ループのために) 完了しない場合は、どうすることもできません。スレッドの中断はクライアント コードで受け入れられる必要があり、スレッドの停止は非推奨です。

于 2012-06-22T17:34:28.643 に答える
1

簡潔な答え

いいえ、既存の JVM 実装ではありません。

長い答え

JVM のソース コードを広範囲にハッキングする意思がある場合は、理論的には可能です。可能であれば、これは抜本的なことです。

サイドノート:

Erlang のランタイムは、その軽量プロセスを管理する方法で、まさにあなたが求めていることを実行します。スイッチがオフになり、他の何かが実行される前に、スレッドごとに N 個のステートメントが実行されます。これが、Erlang VM が中程度のハードウェアで数万のプロセスをサポートする方法です。

于 2012-06-22T17:50:49.073 に答える
0

WCET分析ツールはほとんどありませんが、コードに特別な注釈が付けられていることを前提としています。たとえば、Voltaツールを参照してください。

実行時にこのような問題を検出する必要がある場合、唯一の方法は、プラグインの実行を別のスレッドにラップして実行時間を処理することです。これがです。

于 2012-06-22T17:42:37.030 に答える
-1

これが役立つ場合があります-http://docs.oracle.com/javase/1.5.0/docs/guide/jvmti/jvmti.html

JVMTIは、ツールが実行時にJVMをプロファイリングするのに役立つAPIです。コードを書く必要がありますが、これにより、何を測定および監視するかについて多くの自由が得られます。

于 2012-06-22T21:54:29.730 に答える