|
JavaTM Platform Standard Ed. 6 |
|||||||||
��һ���� ��һ���� | ��� ��� ������ | |||||||||
ժҪ�� Ƕ�� | �ֶ� | ���췽�� | ���� | ��ϸ��Ϣ�� �ֶ� | ���췽�� | ���� |
public interface Instrumentation
�����ṩ��� Java ������Դ�������ķ���������������ֽ��룬���Ѽ����ֹ�����ʹ�õ����ݡ����ڸ�����ȫ�ǽ������ӣ�������Щ���߲���Ӧ�ó����״̬����Ϊ�����������ߵ����Ӱ�����������������������Ƿ��������¼���¼����
��ȡ Instrumentation
�ӿڵ�ʵ�������ַ�ʽ��
�� JVM ��ָʾһ��������ķ�ʽ����ʱ�������ݸ�������� premain
����һ�� Instrumentation
ʵ����
�� JVM �ṩij�ֻ����� JVM ����֮��ijһʱ����������ʱ�������ݸ���������� agentmain
����һ�� Instrumentation
ʵ����
��Щ���������淶��������
���ij����������� Instrumentation
ʵ��������������κ�ʱ����ø�ʵ���ϵķ�����
����ժҪ | |
---|---|
void |
addTransformer(ClassFileTransformer transformer)
ע���ṩ��ת������ |
void |
addTransformer(ClassFileTransformer transformer,
boolean canRetransform)
ע���ṩ��ת������ |
void |
appendToBootstrapClassLoaderSearch(JarFile jarfile)
ָ�� JAR �ļ������������������������塣 |
void |
appendToSystemClassLoaderSearch(JarFile jarfile)
ָ�� JAR �ļ����������ϵͳ����������塣 |
Class[] |
getAllLoadedClasses()
���� JVM ��ǰ���ص�����������顣 |
Class[] |
getInitiatedClasses(ClassLoader loader)
�������г�ʼ���������� loader ��������顣 |
long |
getObjectSize(Object objectToSize)
����ָ������ʹ�õ��ض���ʵ�ֵĽ��ƴ洢���� |
boolean |
isModifiableClass(Class<?> theClass)
ȷ��һ�����Ƿ���Ա� retransformation �� redefinition �ġ� |
boolean |
isNativeMethodPrefixSupported()
���ص�ǰ JVM �����Ƿ�֧�����ñ�������ǰ�� |
boolean |
isRedefineClassesSupported()
���ص�ǰ JVM �����Ƿ�֧������ض��塣 |
boolean |
isRetransformClassesSupported()
���ص�ǰ JVM �����Ƿ�֧�������ת���� |
void |
redefineClasses(ClassDefinition... definitions)
ʹ���ṩ�����ļ��ض����ṩ���༯�� |
boolean |
removeTransformer(ClassFileTransformer transformer)
ע���ṩ��ת������ |
void |
retransformClasses(Class<?>... classes)
��ת���ṩ���༯�� |
void |
setNativeMethodPrefix(ClassFileTransformer transformer,
String prefix)
ͨ���������ԣ���ǰӦ�õ����ƣ��˷����ı�������������ʧ�ܴ����� |
������ϸ��Ϣ |
---|
void addTransformer(ClassFileTransformer transformer, boolean canRetransform)
canRetransform
Ϊ true����ô��ת����ʱҲ�����ø�ת������
�й�ת�����õ�˳����μ� ClassFileTransformer.transform
��
���ת������ִ�й������׳��쳣��JVM ����Ȼ��˳�����������ע��ת���������Զ��������ͬ��ת��������������ô���һ���µ�ת������ʵ����������������
�˷���ּ�����ڼ�⣬������淶������
transformer
- Ҫע���ת����canRetransform
- ��ת������ת���Ƿ������ת��
NullPointerException
- ��������� null
ת����
UnsupportedOperationException
- ��� canRetransform
Ϊ true ����ǰ JVM �����ò�������ת����isRetransformClassesSupported()
Ϊ false����void addTransformer(ClassFileTransformer transformer)
�� addTransformer(transformer, false)
��ͬ��
transformer
- Ҫע���ת����
NullPointerException
- ���������һ�� null
ת����addTransformer(ClassFileTransformer,boolean)
boolean removeTransformer(ClassFileTransformer transformer)
transformer
- Ҫע����ת����
NullPointerException
- ���������һ�� null
ת����boolean isRetransformClassesSupported()
Can-Retransform-Classes
�嵥�����ڴ��� JAR �ļ�������Ϊ true
�������淶���������� JVM ֧�ִ�����ʱ����֧����ת����
�ڵ��� JVM �ĵ���ʵ���������У���ε��ô˷��������Ƿ�����ͬ�Ĵ𰸡�
retransformClasses(java.lang.Class...)
void retransformClasses(Class<?>... classes) throws UnmodifiableClassException
�˺���Ϊ����Ѽ������ṩ�˷��㡣
���������������ض�������ʱ����ʼ���ļ��ֽڿ���ʹ�� ClassFileTransformer
ת����
�˺�������ת�����̣���ǰ�Ƿ�����ת������
��ת�������²�����У�
canRetransform
��Ϊ false ��ת��������һ������ػ��ض����ڼ� transform
���ص��ֽڽ�����������ת���������ע�⣬��ȼ��ڲ������ĵ�����Ӧ��ǰһ��ת����û�е��� transform
��������⡣
canRetransform
��Ϊ true ��ת����������Щת�����е��� transform
����
ת����˳���� transform
���������������Զ�����Ӧ�ò�����ת����ת��ʱ��Ҳ��ʹ����һ˳��
��������ļ��ֽڱ�ʾ��Ӧ��ת��ǰ�����ݸ� ClassLoader.defineClass
�� redefineClasses
���ֽڣ����п��ܲ���ȫƥ�䡣�����صIJ��ֻ����ݿ��ܲ�ͬ�������ص���Ŀ���ܶ�һЩ����һЩ����������Ŀ��˳����ܲ�ͬ�����ǣ������ֽ����г����ص��������Ƕ�Ӧ�ġ�һЩ���Կ��ܲ����ڡ���˳��û������ĵط������磬������˳�����ܲ�����˳��
�˷�����һ�������ϲ������Ա�����ͬʱ�Զ�������������ĸ��ģ���ת���� A Ҫ����ת���� B����
�����ת���ķ����л�Ķ�ջ֡����ô��Щ���֡����������ԭ�������ֽ��롣��ת���ķ����������µĵ��á�
�˷������������κγ�ʼ��������JVM ���������·����ij�ʼ�����⡣���仰˵���ض���һ������������ʼ�����������С���̬������ֵ�������֮ǰ��ֵһ����
��ת�����ʵ������Ӱ�졣
��ת�����ܻ���ķ����塢�����غ����ԡ���ת���������ӡ��Ƴ����������ֶλ������ø��ķ���ǩ�����̳й�ϵ�����Ժ�İ汾�У����ܻ�ȡ����Щ���ơ���Ӧ��ת��֮ǰ�����ļ��ֽڲ��ᱻ��顢��֤�Ͱ�װ���������ֽڴ��˷������׳��쳣��
����˷����׳��쳣������ת���κ��ࡣ
�˷���ּ�����ڼ�⣬������淶������
classes
- Ҫת���������飻
��������Ϊ 0 ���飬����������£��˷�����ִ���κβ���
UnmodifiableClassException
- ���������ָ�����ࣨisModifiableClass(java.lang.Class)
���� false
��
UnsupportedOperationException
- ��� JVM �ĵ�ǰ���ò�������ת����isRetransformClassesSupported()
Ϊ false����������ת����ͼ��������֧�ֵĸ���
ClassFormatError
- ������ݲ�������Ч����
NoClassDefFoundError
- ������ļ��е����Ʋ������������
UnsupportedClassVersionError
- ������ļ��汾�Ų���֧��
ClassCircularityError
- ����������ѭ��
LinkageError
- ����������Ӵ���
NullPointerException
- ����ṩ������������������Ϊ null
��isRetransformClassesSupported()
,
addTransformer(java.lang.instrument.ClassFileTransformer, boolean)
,
ClassFileTransformer
boolean isRedefineClassesSupported()
Can-Retransform-Classes
�嵥�����ڴ��� JAR �ļ�������Ϊ true
�������淶���������� JVM ֧�ִ�����ʱ����֧����ת����
��ִ�е��� JVM �ĵ�ʵ���������У��Դ˷����Ķ�ε��ý�ʼ�շ���ͬһӦ��
redefineClasses(java.lang.instrument.ClassDefinition...)
void redefineClasses(ClassDefinition... definitions) throws ClassNotFoundException, UnmodifiableClassException
�˷������������Ķ��壬�����������е����ļ��ֽڣ����� fix-and-continue ���Թ��������±���Դ����ʱ������һ������Ҫת���������ļ��ֽڵĵط������磬�ֽ������У�Ӧ��ʹ�� retransformClasses
��
�˷�����һ�������ϲ������Ա�����ͬʱ�Զ�������������ĸ��ģ��ض����� A Ҫ���ض����� B����
����ض���ķ����л�Ķ�ջ֡����ô��Щ���֡����������ԭ�������ֽ��롣�����µĵ�����ʹ�ô��ض���ķ�����
�˷������������κγ�ʼ��������JVM ���������·����ij�ʼ�����⡣���仰˵���ض���һ������������ʼ�����������С���̬������ֵ�������֮ǰ��ֵһ����
�ض������ʵ������Ӱ�졣
�ض�����ܻ���ķ����塢�����غ����ԡ��ض��岻�����ӡ��Ƴ����������ֶλ������ø��ķ���ǩ�����̳й�ϵ�����Ժ�İ汾�У����ܻ�ȡ����Щ���ơ���Ӧ��ת��֮ǰ�����ļ��ֽڲ��ᱻ��顢��֤�Ͱ�װ���������ֽڴ��˷������׳��쳣��
����˷����׳��쳣�����ض����κ��ࡣ
�˷���ּ�����ڼ�⣬������淶������
definitions
- Ҫʹ����Ӧ�����������ض���������飻��������Ϊ 0 ���飬����������£��˷�����ִ���κβ���
UnmodifiableClassException
- �������ָ�����ࣨisModifiableClass(java.lang.Class)
���� false
��
UnsupportedOperationException
- ��� JVM �ĵ�ǰ���ò������ض��壨isRedefineClassesSupported()
Ϊ false�����ض�����ͼ��������֧�ֵĸ���
ClassFormatError
- ������ݲ�������Ч��
NoClassDefFoundError
- ������ļ��е������������Ʋ����
UnsupportedClassVersionError
- ������ļ��汾�Ų���֧��
ClassCircularityError
- ����������ѭ��
LinkageError
- ����������Ӵ���
NullPointerException
- ����ṩ�Ķ�����������κ����Ϊ null
��
ClassNotFoundException
- �����׳�������ֻ��Ϊ�˼��ݣ�isRedefineClassesSupported()
,
addTransformer(java.lang.instrument.ClassFileTransformer, boolean)
,
ClassFileTransformer
boolean isModifiableClass(Class<?> theClass)
true
��
�����ܱ��ģ���ô�˷������� false
��
����Ҫ��ת�����࣬isRetransformClassesSupported()
Ҳ����Ϊ true���� isRetransformClassesSupported()
��ֵ��Ӱ��˺������ص�ֵ��
����Ҫ�ض�����࣬isRedefineClassesSupported()
Ҳ����Ϊ true���� isRedefineClassesSupported()
��ֵ��Ӱ��˺������ص�ֵ��
�����ࣨ���� java.lang.Integer.TYPE
������������ġ�
NullPointerException
- ���ָ������Ϊ null
��retransformClasses(java.lang.Class...)
,
isRetransformClassesSupported()
,
redefineClasses(java.lang.instrument.ClassDefinition...)
,
isRedefineClassesSupported()
Class[] getAllLoadedClasses()
Class[] getInitiatedClasses(ClassLoader loader)
loader
��������顣����ṩ�ļ�����Ϊ null
�������������������ʼ�����ࡣ
loader
- ���������ʼ�����б��ļ�����
loader
��������飻���û�У��س���Ϊ 0 ����long getObjectSize(Object objectToSize)
objectToSize
- ��Ҫȷ����С�Ķ���
NullPointerException
- ����ṩ�� Object Ϊ null
��void appendToBootstrapClassLoaderSearch(JarFile jarfile)
������������������������Ϊ�����������������δ�ܳɹ���������ʱ��JAR �ļ�
�е���ĿҲ����������
���Զ��ʹ�ô˷��������յ��ô˷�����˳�����Ӷ��Ҫ������ JAR �ļ���
������Ҫ�����������Ϊ��������������Դ�⣬����Ӧ��ע��ȷ�� JAR �������κ����������Դ��
Υ���˹涨������������ϵIJ���Ԥ����Ϊ�����磬�����м����� L��L �Ĵ�����������Ϊ�������������
���⣬��һ���� C �ķ�������һ�� L ������࣬�����˷ǹ�����ȡ�� C$1����� JAR �ļ������� C$1����ô������������Ĵ��������� C$1 ����������������塣�����н��׳� IllegalAccessError
������ܵ���Ӧ�ó���ʧ�ܡ�һ��������������İ취�ǣ��Լ����ʹ��Ψһ�İ����ơ�
Java ������淶�涨���������Խ��� Java �������ǰδ�ܳɹ������ķ������ý�����ʧ�ܣ����׳��������������ʧ��ʱ��ͬ�Ĵ�����ˣ���� JAR �ļ�������ij����Ŀ��Ӧ�� Java �����δ�ܳɹ��������õ��࣬��ô�������Խ��������ý�����ʧ�ܣ����׳��������������ʧ��ʱ��ͬ�Ĵ���
jarfile
- �������������δ�ɹ���������ʱҪ������ JAR �ļ���
NullPointerException
- ��� jarfile
Ϊ null
��appendToSystemClassLoaderSearch(java.util.jar.JarFile)
,
ClassLoader
,
JarFile
void appendToSystemClassLoaderSearch(JarFile jarfile)
getSystemClassLoader()
��δ�ܳɹ���������ʱ��JarFile
�е���ĿҲ����������
���Զ��ʹ�ô˷��������յ��ô˷�����˳�����Ӷ��Ҫ������ JAR �ļ���
������Ҫϵͳ�������Ϊ��������������Դ�⣬����Ӧ��ע��ȷ�� JAR �������κ����������Դ��
Υ���˹涨������������ϵIJ���Ԥ����Ϊ�����μ� appendToBootstrapClassLoaderSearch
����
���ʵ������Ϊ appendToClassPathForInstrumentation
�ķ���������һ������Ϊ java.lang.String
�IJ���������ôϵͳ�������֧������Ҫ������ JAR �ļ�����Ҫ��÷������� public
����Ȩ��JAR �ļ�������ͨ���� jarfile
���� getName()
������ȡ��������Ϊ�����ṩ�� appendtoClassPathForInstrumentation
������
Java ������淶�涨���������Խ��� Java �������ǰδ�ܳɹ������ķ������ý�����ʧ�ܣ����׳��������������ʧ��ʱ��ͬ�Ĵ�����ˣ���� JAR �ļ�������ij����Ŀ��Ӧ�� Java �����δ�ܳɹ��������õ��࣬��ô�������Խ��������ý�����ʧ�ܣ����׳��������������ʧ��ʱ��ͬ�Ĵ���
�˷��������� java.class.path
ϵͳ����
��ֵ��
jarfile
- ��ϵͳ�������δ�ɹ���������ʱҪ������ JAR �ļ���
UnsupportedOperationException
- ���ϵͳ���������֧������Ҫ������ JAR �ļ���
NullPointerException
- ��� jarfile
Ϊ null
��appendToBootstrapClassLoaderSearch(java.util.jar.JarFile)
,
ClassLoader.getSystemClassLoader()
,
JarFile
boolean isNativeMethodPrefixSupported()
Can-Set-Native-Method-Prefix
�嵥�����ڴ��� JAR �ļ�������Ϊ true
�������淶���������� JVM ֧�ִ�����ʱ����֧�����ñ�������ǰ��
�ڵ��� JVM �ĵ���ʵ���������У���ε��ô˷��������Ƿ�����ͬ��Ӧ��
setNativeMethodPrefix(java.lang.instrument.ClassFileTransformer, java.lang.String)
void setNativeMethodPrefix(ClassFileTransformer transformer, String prefix)
ClassFileTransformer
һ��ʹ��ʱ����������Ȿ��������
���ڱ�����������ֱ�Ӽ�⣨����û���ֽ��룩����˱���ʹ�ÿ��Լ��ķDZ���������װ���ǡ����磬����У�
native boolean foo(int x);
��ô����ת�����ļ�������ij�ʼ���������ʹ�� ClassFileTransformer����ʹ֮��ɣ�
boolean foo(int x) { ... record entry to foo ... return wrapped_foo(x); } native boolean wrapped_foo(int x);
���� foo
��Ϊʵ�ʱ��������İ�װ���������и���ǰ "wrapped_"��ע�⣬�� "wrapped_" ��Ϊǰ�������ʣ���Ϊ�����п��������з������������ "$$$MyAgentWrapped$$$_" ֮����Ӻ��ʣ����ǽ�������Щʾ���Ŀɶ��ԡ�
��װ���������ڱ��������������ռ����ݣ������ڵ���������������Ӱ�װ�ķ����뱾��ʵ�֡�
Ҳ����˵������ wrapped_foo
��Ҫ������Ϊ foo
�ı���ʵ�֣�����
Java_somePackage_someClass_foo(JNIEnv* env, jint x)
�˺�������ָ��ǰ������ǡ���Ľ�����
��ȷ��˵����������ʧ��ʱ�����������³��Կ���ǰ�����н��������ַ�ʽ��ʹ�� JNI ���� RegisterNatives
����ʽ�����ͳ����Զ����������� RegisterNatives
��JVM ���������¹�����
method(foo) -> nativeImplementation(foo)
���˲���ʧ�ܣ����������ԣ���ָ����ǰ���ӵ�������������У��������
method(wrapped_foo) -> nativeImplementation(foo)
�����Զ�������JVM �����ԣ�
method(wrapped_foo) -> nativeImplementation(wrapped_foo)
���˲���ʧ�ܣ����������ԣ���ʵ����ɾ��ָ����ǰ������У��������
method(wrapped_foo) -> nativeImplementation(foo)
ע�⣬ǰֻ�ڱ�����ʧ��ʱʹ�ã���˿�����ѡ��ذ�װ����������
ÿ�� ClassFileTransformer
����ִ���䱾�����ֽڴ���ת������˿���ҪӦ�ö����װ���㡣����ÿ��ת������Ҫ���Լ���ǰ��ת���ǰ�˳��Ӧ�õģ����ǰ�����Ӧ�ã�Ҳ������ͬ��˳��Ӧ�ã��μ� addTransformer
����
���ԣ��������ת����Ӧ���˰�װ����foo
����Ϊ $trans3_$trans2_$trans1_foo
�����ǣ�����ڶ���ת����û�ж� foo
Ӧ�ð�װ������ô������ $trans3_$trans1_foo
��Ҫ��Ч��ȷ��ǰ���У�������DZ�����װ������ʱ��Ӧ���м�ǰ����ˣ������һ��ʾ���У���ʹ $trans1_foo
���DZ���������$trans1_
ǰҲ��Ӧ�ã���Ϊ $trans1_foo
���ڡ�
transformer
- ʹ�ô�ǰ��װ�� ClassFileTransformer��prefix
- ��Ӧ�õ���װ�ı���������ǰ��
NullPointerException
- ������� null
ת������
UnsupportedOperationException
- ��� JVM �ĵ�ǰ���ò��������ñ�������ǰ��isNativeMethodPrefixSupported()
Ϊ false����
IllegalArgumentException
- ���ת����û��ע�ᣨ�μ� addTransformer
����
|
JavaTM Platform Standard Ed. 6 |
|||||||||
��һ���� ��һ���� | ��� ��� ������ | |||||||||
ժҪ�� Ƕ�� | �ֶ� | ���췽�� | ���� | ��ϸ��Ϣ�� �ֶ� | ���췽�� | ���� |
��Ȩ���� 2007 Sun Microsystems, Inc. ��������Ȩ���� ����������֤��������������ĵ����·ַ�������