comparison src/share/vm/prims/unsafe.cpp @ 20415:47e3110c47e8

6642881: Improve performance of Class.getClassLoader() Summary: Add classLoader to java/lang/Class instance for fast access Reviewed-by: alanb, lfoltan, rriggs, vlivanov, twisti, jfranck
author coleenp
date Fri, 05 Sep 2014 16:01:29 -0400
parents c49dcaf78a65
children 7848fc12602b f46871c6c063
comparison
equal deleted inserted replaced
20407:9be4ca335650 20415:47e3110c47e8
951 ThreadToNativeFromVM ttnfv(thread); 951 ThreadToNativeFromVM ttnfv(thread);
952 return Unsafe_DefineClass_impl(env, name, data, offset, length, loader, pd); 952 return Unsafe_DefineClass_impl(env, name, data, offset, length, loader, pd);
953 } 953 }
954 UNSAFE_END 954 UNSAFE_END
955 955
956 static jobject get_class_loader(JNIEnv* env, jclass cls) {
957 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
958 return NULL;
959 }
960 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
961 oop loader = k->class_loader();
962 return JNIHandles::make_local(env, loader);
963 }
956 964
957 UNSAFE_ENTRY(jclass, Unsafe_DefineClass0(JNIEnv *env, jobject unsafe, jstring name, jbyteArray data, int offset, int length)) 965 UNSAFE_ENTRY(jclass, Unsafe_DefineClass0(JNIEnv *env, jobject unsafe, jstring name, jbyteArray data, int offset, int length))
958 UnsafeWrapper("Unsafe_DefineClass"); 966 UnsafeWrapper("Unsafe_DefineClass");
959 { 967 {
960 ThreadToNativeFromVM ttnfv(thread); 968 ThreadToNativeFromVM ttnfv(thread);
961 969
962 int depthFromDefineClass0 = 1; 970 int depthFromDefineClass0 = 1;
963 jclass caller = JVM_GetCallerClass(env, depthFromDefineClass0); 971 jclass caller = JVM_GetCallerClass(env, depthFromDefineClass0);
964 jobject loader = (caller == NULL) ? NULL : JVM_GetClassLoader(env, caller); 972 jobject loader = (caller == NULL) ? NULL : get_class_loader(env, caller);
965 jobject pd = (caller == NULL) ? NULL : JVM_GetProtectionDomain(env, caller); 973 jobject pd = (caller == NULL) ? NULL : JVM_GetProtectionDomain(env, caller);
966 974
967 return Unsafe_DefineClass_impl(env, name, data, offset, length, loader, pd); 975 return Unsafe_DefineClass_impl(env, name, data, offset, length, loader, pd);
968 } 976 }
969 UNSAFE_END 977 UNSAFE_END