--- old/src/share/vm/runtime/sharedRuntime.cpp 2017-09-21 09:18:06.676998203 +0200 +++ new/src/share/vm/runtime/sharedRuntime.cpp 2017-09-21 09:18:06.600998204 +0200 @@ -2958,14 +2958,17 @@ SignatureStream ss(method->signature()); for (; !ss.at_return_type(); ss.next()) { BasicType bt = ss.type(); - if (bt == T_VALUETYPE) { + if (bt == T_VALUETYPE) { #ifdef ASSERT Thread* THREAD = Thread::current(); - Handle class_loader(THREAD, method->method_holder()->class_loader()); - Handle protection_domain(THREAD, method->method_holder()->protection_domain()); - Klass* k = ss.as_klass(class_loader, protection_domain, SignatureStream::ReturnNull, THREAD); - assert(k != NULL && !HAS_PENDING_EXCEPTION, "can't resolve klass"); - assert(k == SystemDictionary::___Value_klass(), "other values not supported"); + // Avoid class loading from compiler thread + if (THREAD->can_call_java()) { + Handle class_loader(THREAD, method->method_holder()->class_loader()); + Handle protection_domain(THREAD, method->method_holder()->protection_domain()); + Klass* k = ss.as_klass(class_loader, protection_domain, SignatureStream::ReturnNull, THREAD); + assert(k != NULL && !HAS_PENDING_EXCEPTION, "can't resolve klass"); + assert(k == SystemDictionary::___Value_klass(), "other values not supported"); + } #endif bt = T_VALUETYPEPTR; }