Relates :
|
|
Relates :
|
|
Relates :
|
During class resolution, the JVM calls ClassLoader.checkPackageAccess(), and then updates DictionaryEntry::_pd_set accordingly. See http://hg.openjdk.java.net/jdk/hs/file/5264a11d3753/src/hotspot/share/classfile/systemDictionary.cpp#l438 JavaCalls::call_special(&result, class_loader, system_loader, vmSymbols::checkPackageAccess_name(), ...); .... if (HAS_PENDING_EXCEPTION) return; .... dictionary->add_protection_domain(d_index, d_hash, klass, protection_domain, THREAD); However, when the security manager is not installed, ClassLoader.checkPackageAccess() does nothing: http://hg.openjdk.java.net/jdk/hs/file/5264a11d3753/src/java.base/share/classes/java/lang/ClassLoader.java#l669 private void checkPackageAccess(Class<?> cls, ProtectionDomain pd) { final SecurityManager sm = System.getSecurityManager(); if (sm != null) { ... do some checks .... } } So the JVM is making all these Java upcalls and maintaining a complicated cache for nothing. This causes slow down both in class loading time, as well as in GC pauses. Preliminary benchmarking shows about 1.5% speed up when running hello world in clojure.
|