2013-08-14 11 views
3

java.util.ArrayList과 같은 클래스를 계측하려 할 때 java.lang.instrument.UnmodifiableClassException이 발생했습니다.어떤 클래스는 변경 불가능하고 계측 할 수 없으며이를 우회 할 수있는 방법이 있습니까?

Instrumentation.isModifiableClass()을 사용하여 클래스가 수정 가능한지 확인할 수 있습니다.

내 질문은 :

  1. 어떤 클래스를 modifable되지 않습니다? 어떻게 결정됩니까?
  2. 이것을 우회하는 방법이 있습니까?

그런데 HotSpot 또는 Jrocking으로 작업 할 때 IBM JVM에서만이 예외가 발생하지 않았습니다.

감사합니다, 길 라드

답변

3

당신은 here for the reference

클래스가 재 변환 또는 재정의로 변경 여부를 확인

boolean isModifiableClass(Class<?> theClass) 

봐 귀하의 장비에 isModifiableClass를 호출해야합니다. 클래스가 변경 가능한 경우,이 메소드는 true를 돌려줍니다. 클래스가 변경 불가능한 경우,이 메소드는 false를 돌려줍니다. 클래스를 다시 변환하려면 isRetransformClassesSupported()도 true 여야합니다. 그러나 isRetransformClassesSupported()의 값은이 함수가 반환하는 값에 영향을주지 않습니다. 클래스를 다시 정의하려면 isRedefineClassesSupported()도 true 여야합니다. 그러나 isRedefineClassesSupported()의 값은이 함수가 반환하는 값에 영향을주지 않습니다.

프리미티브 클래스 (예 : java.lang.Integer.TYPE) 및 배열 클래스는 절대로 수정할 수 없습니다.

+0

답변 해 주셔서 감사합니다. 예, 제가하고있는 일입니다. 내 질문은 어떤 클래스가 수정 불가능하고 그것을 우회하는 방법이 있는지 결정하는 것입니다 ... – Gilad

+0

나는 그것을 우회하는 방법이 보이지 않습니다. JVM이 안전하게 유지되는 방법 인 것 같아서 모든 것을 수정할 수 없습니다. – Tala