8291840: Avoid JavaCalls for setting up _java_system_loader and _java_platform_loader

Reviewed-by: coleenp, iklam
This commit is contained in:
Calvin Cheung 2022-08-04 23:56:11 +00:00
parent 6e6c64c6f6
commit 27c8826090
4 changed files with 64 additions and 6 deletions

View file

@ -44,6 +44,7 @@
#include "logging/logStream.hpp"
#include "memory/resourceArea.hpp"
#include "prims/jvmtiExport.hpp"
#include "runtime/arguments.hpp"
#include "runtime/globals_extension.hpp"
#include "runtime/handles.inline.hpp"
#include "runtime/javaCalls.hpp"
@ -499,9 +500,16 @@ void Modules::define_archived_modules(Handle h_platform_loader, Handle h_system_
}
ClassLoaderData* platform_loader_data = SystemDictionary::register_loader(h_platform_loader);
SystemDictionary::set_platform_loader(platform_loader_data);
ClassLoaderDataShared::restore_java_platform_loader_from_archive(platform_loader_data);
ClassLoaderData* system_loader_data = SystemDictionary::register_loader(h_system_loader);
SystemDictionary::set_system_loader(system_loader_data);
// system_loader_data here is always an instance of jdk.internal.loader.ClassLoader$AppClassLoader.
// However, if -Djava.system.class.loader=xxx is specified, java_platform_loader() would
// be an instance of a user-defined class, so make sure this never happens.
assert(Arguments::get_property("java.system.class.loader") == NULL,
"archived full module should have been disabled if -Djava.system.class.loader is specified");
ClassLoaderDataShared::restore_java_system_loader_from_archive(system_loader_data);
}