mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
6642881: Improve performance of Class.getClassLoader()
Add classLoader to java/lang/Class instance for fast access Reviewed-by: alanb, lfoltan, rriggs, vlivanov, twisti, jfranck
This commit is contained in:
parent
243d697d71
commit
d8ce93cea5
7 changed files with 46 additions and 8 deletions
|
@ -891,6 +891,14 @@ UNSAFE_ENTRY(jclass, Unsafe_DefineClass(JNIEnv *env, jobject unsafe, jstring nam
|
|||
}
|
||||
UNSAFE_END
|
||||
|
||||
static jobject get_class_loader(JNIEnv* env, jclass cls) {
|
||||
if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
|
||||
return NULL;
|
||||
}
|
||||
Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
|
||||
oop loader = k->class_loader();
|
||||
return JNIHandles::make_local(env, loader);
|
||||
}
|
||||
|
||||
UNSAFE_ENTRY(jclass, Unsafe_DefineClass0(JNIEnv *env, jobject unsafe, jstring name, jbyteArray data, int offset, int length))
|
||||
UnsafeWrapper("Unsafe_DefineClass");
|
||||
|
@ -899,7 +907,7 @@ UNSAFE_ENTRY(jclass, Unsafe_DefineClass0(JNIEnv *env, jobject unsafe, jstring na
|
|||
|
||||
int depthFromDefineClass0 = 1;
|
||||
jclass caller = JVM_GetCallerClass(env, depthFromDefineClass0);
|
||||
jobject loader = (caller == NULL) ? NULL : JVM_GetClassLoader(env, caller);
|
||||
jobject loader = (caller == NULL) ? NULL : get_class_loader(env, caller);
|
||||
jobject pd = (caller == NULL) ? NULL : JVM_GetProtectionDomain(env, caller);
|
||||
|
||||
return Unsafe_DefineClass_impl(env, name, data, offset, length, loader, pd);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue