Mercurial > hg > graal-jvmci-8
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 |