diff --git a/hazelcast/src/main/java/com/hazelcast/nio/ClassLoaderUtil.java b/hazelcast/src/main/java/com/hazelcast/nio/ClassLoaderUtil.java index 9b5b7b25b495..3c1618fdd9c2 100644 --- a/hazelcast/src/main/java/com/hazelcast/nio/ClassLoaderUtil.java +++ b/hazelcast/src/main/java/com/hazelcast/nio/ClassLoaderUtil.java @@ -44,6 +44,8 @@ public final class ClassLoaderUtil { public static final String HAZELCAST_ARRAY = "[L" + HAZELCAST_BASE_PACKAGE; private static final boolean CLASS_CACHE_DISABLED = Boolean.getBoolean("hazelcast.compat.classloading.cache.disabled"); + private static final boolean CONSTRUCTOR_CACHE_DISABLED = + Boolean.getBoolean("hazelcast.classloading.constructor.cache.disabled"); private static final Map PRIMITIVE_CLASSES; private static final int MAX_PRIM_CLASSNAME_LENGTH = 7; @@ -94,9 +96,11 @@ public static T getOrCreate(T instance, ClassLoader classLoader, String clas @SuppressWarnings("unchecked") public static T newInstance(ClassLoader classLoader, final String className) throws Exception { classLoader = classLoader == null ? ClassLoaderUtil.class.getClassLoader() : classLoader; - Constructor constructor = CONSTRUCTOR_CACHE.get(classLoader, className); - if (constructor != null) { - return constructor.newInstance(); + if (!CONSTRUCTOR_CACHE_DISABLED) { + Constructor constructor = CONSTRUCTOR_CACHE.get(classLoader, className); + if (constructor != null) { + return constructor.newInstance(); + } } Class klass = (Class) loadClass(classLoader, className); return newInstance(klass, classLoader, className); @@ -107,7 +111,7 @@ public static T newInstance(Class klass, ClassLoader classLoader, String if (!constructor.isAccessible()) { constructor.setAccessible(true); } - if (!shouldBypassCache(klass)) { + if (!shouldBypassCache(klass) && !CONSTRUCTOR_CACHE_DISABLED) { CONSTRUCTOR_CACHE.put(classLoader, className, constructor); } return constructor.newInstance();