< prev index next >

src/hotspot/share/prims/jvm.cpp

Print this page
rev 59729 : 8247377: Zero and Minimal VMs are broken after JDK-8198698 ('SystemDictionaryShared' has not been declared)
Reviewed-by:


3719   JVMWrapper("JVM_SupportsCX8");
3720   return VM_Version::supports_cx8();
3721 JVM_END
3722 
3723 JVM_ENTRY(void, JVM_InitializeFromArchive(JNIEnv* env, jclass cls))
3724   JVMWrapper("JVM_InitializeFromArchive");
3725   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
3726   assert(k->is_klass(), "just checking");
3727   HeapShared::initialize_from_archived_subgraph(k);
3728 JVM_END
3729 
3730 JVM_ENTRY(void, JVM_RegisterLambdaProxyClassForArchiving(JNIEnv* env,
3731                                               jclass caller,
3732                                               jstring invokedName,
3733                                               jobject invokedType,
3734                                               jobject methodType,
3735                                               jobject implMethodMember,
3736                                               jobject instantiatedMethodType,
3737                                               jclass lambdaProxyClass))
3738   JVMWrapper("JVM_RegisterLambdaProxyClassForArchiving");

3739   if (!DynamicDumpSharedSpaces) {
3740     return;
3741   }
3742 
3743   Klass* caller_k = java_lang_Class::as_Klass(JNIHandles::resolve(caller));
3744   InstanceKlass* caller_ik = InstanceKlass::cast(caller_k);
3745   if (caller_ik->is_hidden() || caller_ik->is_unsafe_anonymous()) {
3746     // VM anonymous classes and hidden classes not of type lambda proxy classes are currently not being archived.
3747     // If the caller_ik is of one of the above types, the corresponding lambda proxy class won't be
3748     // registered for archiving.
3749     return;
3750   }
3751   Klass* lambda_k = java_lang_Class::as_Klass(JNIHandles::resolve(lambdaProxyClass));
3752   InstanceKlass* lambda_ik = InstanceKlass::cast(lambda_k);
3753   assert(lambda_ik->is_hidden(), "must be a hidden class");
3754   assert(!lambda_ik->is_non_strong_hidden(), "expected a strong hidden class");
3755 
3756   Symbol* invoked_name = NULL;
3757   if (invokedName != NULL) {
3758     invoked_name = java_lang_String::as_symbol(JNIHandles::resolve_non_null(invokedName));
3759   }
3760   Handle invoked_type_oop(THREAD, JNIHandles::resolve_non_null(invokedType));
3761   Symbol* invoked_type = java_lang_invoke_MethodType::as_signature(invoked_type_oop(), true);
3762 
3763   Handle method_type_oop(THREAD, JNIHandles::resolve_non_null(methodType));
3764   Symbol* method_type = java_lang_invoke_MethodType::as_signature(method_type_oop(), true);
3765 
3766   Handle impl_method_member_oop(THREAD, JNIHandles::resolve_non_null(implMethodMember));
3767   assert(java_lang_invoke_MemberName::is_method(impl_method_member_oop()), "must be");
3768   Method* m = java_lang_invoke_MemberName::vmtarget(impl_method_member_oop());
3769 
3770   Handle instantiated_method_type_oop(THREAD, JNIHandles::resolve_non_null(instantiatedMethodType));
3771   Symbol* instantiated_method_type = java_lang_invoke_MethodType::as_signature(instantiated_method_type_oop(), true);
3772 
3773   SystemDictionaryShared::add_lambda_proxy_class(caller_ik, lambda_ik, invoked_name, invoked_type,
3774                                                  method_type, m, instantiated_method_type);
3775 
3776 JVM_END
3777 
3778 JVM_ENTRY(jclass, JVM_LookupLambdaProxyClassFromArchive(JNIEnv* env,
3779                                                         jclass caller,
3780                                                         jstring invokedName,
3781                                                         jobject invokedType,
3782                                                         jobject methodType,
3783                                                         jobject implMethodMember,
3784                                                         jobject instantiatedMethodType,
3785                                                         jboolean initialize))
3786   JVMWrapper("JVM_LookupLambdaProxyClassFromArchive");

3787   if (!DynamicArchive::is_mapped()) {
3788     return NULL;
3789   }
3790 
3791   if (invokedName == NULL || invokedType == NULL || methodType == NULL ||
3792       implMethodMember == NULL || instantiatedMethodType == NULL) {
3793     THROW_(vmSymbols::java_lang_NullPointerException(), NULL);
3794   }
3795 
3796   Klass* caller_k = java_lang_Class::as_Klass(JNIHandles::resolve(caller));
3797   InstanceKlass* caller_ik = InstanceKlass::cast(caller_k);
3798   if (!caller_ik->is_shared()) {
3799     // there won't be a shared lambda class if the caller_ik is not in the shared archive.
3800     return NULL;
3801   }
3802 
3803   Symbol* invoked_name = java_lang_String::as_symbol(JNIHandles::resolve_non_null(invokedName));
3804   Handle invoked_type_oop(THREAD, JNIHandles::resolve_non_null(invokedType));
3805   Symbol* invoked_type = java_lang_invoke_MethodType::as_signature(invoked_type_oop(), true);
3806 
3807   Handle method_type_oop(THREAD, JNIHandles::resolve_non_null(methodType));
3808   Symbol* method_type = java_lang_invoke_MethodType::as_signature(method_type_oop(), true);
3809 
3810   Handle impl_method_member_oop(THREAD, JNIHandles::resolve_non_null(implMethodMember));
3811   assert(java_lang_invoke_MemberName::is_method(impl_method_member_oop()), "must be");
3812   Method* m = java_lang_invoke_MemberName::vmtarget(impl_method_member_oop());
3813 
3814   Handle instantiated_method_type_oop(THREAD, JNIHandles::resolve_non_null(instantiatedMethodType));
3815   Symbol* instantiated_method_type = java_lang_invoke_MethodType::as_signature(instantiated_method_type_oop(), true);
3816 
3817   InstanceKlass* lambda_ik = SystemDictionaryShared::get_shared_lambda_proxy_class(caller_ik, invoked_name, invoked_type,
3818                                                                                    method_type, m, instantiated_method_type);
3819   jclass jcls = NULL;
3820   if (lambda_ik != NULL) {
3821     InstanceKlass* loaded_lambda = SystemDictionaryShared::prepare_shared_lambda_proxy_class(lambda_ik, caller_ik, initialize, THREAD);
3822     jcls = loaded_lambda == NULL ? NULL : (jclass) JNIHandles::make_local(env, loaded_lambda->java_mirror());
3823   }
3824   return jcls;



3825 JVM_END
3826 
3827 JVM_ENTRY(jboolean, JVM_IsCDSDumpingEnabled(JNIEnv* env))
3828     JVMWrapper("JVM_IsCDSDumpingEnable");
3829     return DynamicDumpSharedSpaces;
3830 JVM_END
3831 
3832 JVM_ENTRY(jboolean, JVM_IsCDSSharingEnabled(JNIEnv* env))
3833     JVMWrapper("JVM_IsCDSSharingEnable");
3834     return UseSharedSpaces;
3835 JVM_END
3836 
3837 JVM_ENTRY_NO_ENV(jlong, JVM_GetRandomSeedForCDSDump())
3838   JVMWrapper("JVM_GetRandomSeedForCDSDump");
3839   if (DumpSharedSpaces) {
3840     const char* release = Abstract_VM_Version::vm_release();
3841     const char* dbg_level = Abstract_VM_Version::jdk_debug_level();
3842     const char* version = VM_Version::internal_vm_info_string();
3843     jlong seed = (jlong)(java_lang_String::hash_code((const jbyte*)release, (int)strlen(release)) ^
3844                          java_lang_String::hash_code((const jbyte*)dbg_level, (int)strlen(dbg_level)) ^




3719   JVMWrapper("JVM_SupportsCX8");
3720   return VM_Version::supports_cx8();
3721 JVM_END
3722 
3723 JVM_ENTRY(void, JVM_InitializeFromArchive(JNIEnv* env, jclass cls))
3724   JVMWrapper("JVM_InitializeFromArchive");
3725   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
3726   assert(k->is_klass(), "just checking");
3727   HeapShared::initialize_from_archived_subgraph(k);
3728 JVM_END
3729 
3730 JVM_ENTRY(void, JVM_RegisterLambdaProxyClassForArchiving(JNIEnv* env,
3731                                               jclass caller,
3732                                               jstring invokedName,
3733                                               jobject invokedType,
3734                                               jobject methodType,
3735                                               jobject implMethodMember,
3736                                               jobject instantiatedMethodType,
3737                                               jclass lambdaProxyClass))
3738   JVMWrapper("JVM_RegisterLambdaProxyClassForArchiving");
3739 #if INCLUDE_CDS
3740   if (!DynamicDumpSharedSpaces) {
3741     return;
3742   }
3743 
3744   Klass* caller_k = java_lang_Class::as_Klass(JNIHandles::resolve(caller));
3745   InstanceKlass* caller_ik = InstanceKlass::cast(caller_k);
3746   if (caller_ik->is_hidden() || caller_ik->is_unsafe_anonymous()) {
3747     // VM anonymous classes and hidden classes not of type lambda proxy classes are currently not being archived.
3748     // If the caller_ik is of one of the above types, the corresponding lambda proxy class won't be
3749     // registered for archiving.
3750     return;
3751   }
3752   Klass* lambda_k = java_lang_Class::as_Klass(JNIHandles::resolve(lambdaProxyClass));
3753   InstanceKlass* lambda_ik = InstanceKlass::cast(lambda_k);
3754   assert(lambda_ik->is_hidden(), "must be a hidden class");
3755   assert(!lambda_ik->is_non_strong_hidden(), "expected a strong hidden class");
3756 
3757   Symbol* invoked_name = NULL;
3758   if (invokedName != NULL) {
3759     invoked_name = java_lang_String::as_symbol(JNIHandles::resolve_non_null(invokedName));
3760   }
3761   Handle invoked_type_oop(THREAD, JNIHandles::resolve_non_null(invokedType));
3762   Symbol* invoked_type = java_lang_invoke_MethodType::as_signature(invoked_type_oop(), true);
3763 
3764   Handle method_type_oop(THREAD, JNIHandles::resolve_non_null(methodType));
3765   Symbol* method_type = java_lang_invoke_MethodType::as_signature(method_type_oop(), true);
3766 
3767   Handle impl_method_member_oop(THREAD, JNIHandles::resolve_non_null(implMethodMember));
3768   assert(java_lang_invoke_MemberName::is_method(impl_method_member_oop()), "must be");
3769   Method* m = java_lang_invoke_MemberName::vmtarget(impl_method_member_oop());
3770 
3771   Handle instantiated_method_type_oop(THREAD, JNIHandles::resolve_non_null(instantiatedMethodType));
3772   Symbol* instantiated_method_type = java_lang_invoke_MethodType::as_signature(instantiated_method_type_oop(), true);
3773 
3774   SystemDictionaryShared::add_lambda_proxy_class(caller_ik, lambda_ik, invoked_name, invoked_type,
3775                                                  method_type, m, instantiated_method_type);
3776 #endif // INCLUDE_CDS
3777 JVM_END
3778 
3779 JVM_ENTRY(jclass, JVM_LookupLambdaProxyClassFromArchive(JNIEnv* env,
3780                                                         jclass caller,
3781                                                         jstring invokedName,
3782                                                         jobject invokedType,
3783                                                         jobject methodType,
3784                                                         jobject implMethodMember,
3785                                                         jobject instantiatedMethodType,
3786                                                         jboolean initialize))
3787   JVMWrapper("JVM_LookupLambdaProxyClassFromArchive");
3788 #if INCLUDE_CDS
3789   if (!DynamicArchive::is_mapped()) {
3790     return NULL;
3791   }
3792 
3793   if (invokedName == NULL || invokedType == NULL || methodType == NULL ||
3794       implMethodMember == NULL || instantiatedMethodType == NULL) {
3795     THROW_(vmSymbols::java_lang_NullPointerException(), NULL);
3796   }
3797 
3798   Klass* caller_k = java_lang_Class::as_Klass(JNIHandles::resolve(caller));
3799   InstanceKlass* caller_ik = InstanceKlass::cast(caller_k);
3800   if (!caller_ik->is_shared()) {
3801     // there won't be a shared lambda class if the caller_ik is not in the shared archive.
3802     return NULL;
3803   }
3804 
3805   Symbol* invoked_name = java_lang_String::as_symbol(JNIHandles::resolve_non_null(invokedName));
3806   Handle invoked_type_oop(THREAD, JNIHandles::resolve_non_null(invokedType));
3807   Symbol* invoked_type = java_lang_invoke_MethodType::as_signature(invoked_type_oop(), true);
3808 
3809   Handle method_type_oop(THREAD, JNIHandles::resolve_non_null(methodType));
3810   Symbol* method_type = java_lang_invoke_MethodType::as_signature(method_type_oop(), true);
3811 
3812   Handle impl_method_member_oop(THREAD, JNIHandles::resolve_non_null(implMethodMember));
3813   assert(java_lang_invoke_MemberName::is_method(impl_method_member_oop()), "must be");
3814   Method* m = java_lang_invoke_MemberName::vmtarget(impl_method_member_oop());
3815 
3816   Handle instantiated_method_type_oop(THREAD, JNIHandles::resolve_non_null(instantiatedMethodType));
3817   Symbol* instantiated_method_type = java_lang_invoke_MethodType::as_signature(instantiated_method_type_oop(), true);
3818 
3819   InstanceKlass* lambda_ik = SystemDictionaryShared::get_shared_lambda_proxy_class(caller_ik, invoked_name, invoked_type,
3820                                                                                    method_type, m, instantiated_method_type);
3821   jclass jcls = NULL;
3822   if (lambda_ik != NULL) {
3823     InstanceKlass* loaded_lambda = SystemDictionaryShared::prepare_shared_lambda_proxy_class(lambda_ik, caller_ik, initialize, THREAD);
3824     jcls = loaded_lambda == NULL ? NULL : (jclass) JNIHandles::make_local(env, loaded_lambda->java_mirror());
3825   }
3826   return jcls;
3827 #else
3828   return NULL;
3829 #endif // INCLUDE_CDS
3830 JVM_END
3831 
3832 JVM_ENTRY(jboolean, JVM_IsCDSDumpingEnabled(JNIEnv* env))
3833     JVMWrapper("JVM_IsCDSDumpingEnable");
3834     return DynamicDumpSharedSpaces;
3835 JVM_END
3836 
3837 JVM_ENTRY(jboolean, JVM_IsCDSSharingEnabled(JNIEnv* env))
3838     JVMWrapper("JVM_IsCDSSharingEnable");
3839     return UseSharedSpaces;
3840 JVM_END
3841 
3842 JVM_ENTRY_NO_ENV(jlong, JVM_GetRandomSeedForCDSDump())
3843   JVMWrapper("JVM_GetRandomSeedForCDSDump");
3844   if (DumpSharedSpaces) {
3845     const char* release = Abstract_VM_Version::vm_release();
3846     const char* dbg_level = Abstract_VM_Version::jdk_debug_level();
3847     const char* version = VM_Version::internal_vm_info_string();
3848     jlong seed = (jlong)(java_lang_String::hash_code((const jbyte*)release, (int)strlen(release)) ^
3849                          java_lang_String::hash_code((const jbyte*)dbg_level, (int)strlen(dbg_level)) ^


< prev index next >