4

などのクラスを計測しようとするとjava.util.ArrayList、 が表示されましjava.lang.instrument.UnmodifiableClassExceptionた。

を使用して、クラスが変更可能かどうかを確認できますInstrumentation.isModifiableClass()

私の質問は:

  1. 変更できないクラスはどれですか? それはどのように決定されますか。
  2. これをバイパスする方法はありますか?

ちなみに、HotSpot や Jrocking で作業しているときにはこの例外は発生せず、IBM JVM でのみ発生しました。

ありがとう、ギラッド

4

1 に答える 1

3

isModifiableClassインストルメンテーションを呼び出す必要があります

boolean isModifiableClass(Class<?> theClass)

参考までにこちらをご覧ください

クラスが再変換または再定義によって変更可能かどうかを決定します。クラスが変更可能な場合、このメソッドは true を返します。クラスが変更可能でない場合、このメソッドは false を返します。 クラスを再変換するには、 isRetransformClassesSupported() も true にする必要があります。ただし、 isRetransformClassesSupported() の値は、この関数によって返される値には影響しません。クラスを再定義するには、isRedefineClassesSupported() も true にする必要があります。ただし、 isRedefineClassesSupported() の値は、この関数によって返される値には影響しません。

プリミティブ クラス (java.lang.Integer.TYPE など) と配列クラスは変更できません。

于 2013-08-14T09:50:17.540 に答える