2012-04-21 10 views
2

カスタムJavaクラスを読み込むためにカスタムクラスローダーを使用しています。これらのロードされたクラスからループ内でいくつかのメソッドを実行する必要があります。ループの繰り返しごとに、すべてのクラス(すべての静的フィールド)の初期化が必要です。私は、各反復で新しいクラスローダーを使用しない場合、実行時間よりも反復ごとに新しいクラスローダーを使用すると、実行時間が3倍遅くなることを測定しました。ロードされたクラスをJavaで高速にリセットする方法は?

ロードされたクラスを新しいクラスローダをロードせずに初期状態にリセットできますか?

異なるクラスローダーで同じクラスを繰り返し読み込む方法がありますか?

答えて

2

新しいクラスローダーでクラスをロードすると、JMVはほぼ確実にre-jit the byte codeになります。それが行われるまで、新しくロードされたクラスの最初の使用は遅くなります。

これらのクラスはあなたが変更できないライブラリコードだと思いますか?この方法でクラスを使用する必要があるという事実は、私に欠陥のあるデザインを示唆しているからです。

+0

セキュリティ機能です。クラスは、ユーザによってアップロードされ、サーバシステム内で実行される。 – tangens

0

ちょうど私の頭の上から:リフレクションを使ってクラスの初期状態のスナップショットを撮ってから元に戻すことはできますか?

+0

フィールドが最終的な場合はどうなりますか? –

+0

を参照してください。http://stackoverflow.com/questions/3301635/change-private-static-final-field-using-java-reflection – slvr

関連する問題