src/share/vm/prims/jvm.cpp
Print this page
rev 6841 : mq
rev 6842 : mq
@@ -26,10 +26,14 @@
#include "classfile/classLoader.hpp"
#include "classfile/javaAssertions.hpp"
#include "classfile/javaClasses.hpp"
#include "classfile/stringTable.hpp"
#include "classfile/systemDictionary.hpp"
+#if INCLUDE_CDS
+#include "classfile/sharedClassUtil.hpp"
+#include "classfile/systemDictionaryShared.hpp"
+#endif
#include "classfile/vmSymbols.hpp"
#include "gc_interface/collectedHeap.inline.hpp"
#include "interpreter/bytecode.hpp"
#include "memory/oopFactory.hpp"
#include "memory/universe.inline.hpp"
@@ -991,11 +995,19 @@
Klass* k = SystemDictionary::find_instance_or_array_klass(klass_name,
h_loader,
Handle(),
CHECK_NULL);
-
+#if INCLUDE_CDS
+ if (k == NULL) {
+ // If the class is not already loaded, try to see if it's in the shared
+ // archive for the current classloader (h_loader).
+ instanceKlassHandle ik = SystemDictionaryShared::find_or_load_shared_class(
+ klass_name, h_loader, CHECK_NULL);
+ k = ik();
+ }
+#endif
return (k == NULL) ? NULL :
(jclass) JNIHandles::make_local(env, k->java_mirror());
JVM_END