Package org.apache.flink.util
Class FlinkUserCodeClassLoaders.SafetyNetWrapperClassLoader
- java.lang.Object
-
- java.lang.ClassLoader
-
- java.security.SecureClassLoader
-
- java.net.URLClassLoader
-
- org.apache.flink.util.MutableURLClassLoader
-
- org.apache.flink.util.FlinkUserCodeClassLoaders.SafetyNetWrapperClassLoader
-
- All Implemented Interfaces:
Closeable,AutoCloseable
- Enclosing class:
- FlinkUserCodeClassLoaders
@Internal public static class FlinkUserCodeClassLoaders.SafetyNetWrapperClassLoader extends MutableURLClassLoader
Ensures that holding a reference on the context class loader outliving the scope of user code does not prevent the user classloader to be garbage collected (FLINK-16245).This classloader delegates to the actual user classloader. Upon
close(), the delegate is nulled and can be garbage collected. Additional class resolution will be resolved solely through the bootstrap classloader and most likely result in ClassNotFound exceptions.
-
-
Field Summary
Fields Modifier and Type Field Description protected FlinkUserCodeClassLoaderinner
-
Constructor Summary
Constructors Modifier Constructor Description protectedSafetyNetWrapperClassLoader(FlinkUserCodeClassLoader inner, ClassLoader parent)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddURL(URL url)voidclose()URLgetResource(String name)Enumeration<URL>getResources(String name)URL[]getURLs()Class<?>loadClass(String name)protected Class<?>loadClass(String name, boolean resolve)-
Methods inherited from class java.net.URLClassLoader
definePackage, findClass, findResource, findResources, getPermissions, getResourceAsStream, newInstance, newInstance
-
Methods inherited from class java.security.SecureClassLoader
defineClass, defineClass
-
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
-
-
-
Field Detail
-
inner
protected volatile FlinkUserCodeClassLoader inner
-
-
Constructor Detail
-
SafetyNetWrapperClassLoader
protected SafetyNetWrapperClassLoader(FlinkUserCodeClassLoader inner, ClassLoader parent)
-
-
Method Detail
-
close
public void close()
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classURLClassLoader
-
loadClass
public Class<?> loadClass(String name) throws ClassNotFoundException
- Overrides:
loadClassin classClassLoader- Throws:
ClassNotFoundException
-
loadClass
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
- Overrides:
loadClassin classClassLoader- Throws:
ClassNotFoundException
-
addURL
public void addURL(URL url)
- Overrides:
addURLin classMutableURLClassLoader
-
getResource
public URL getResource(String name)
- Overrides:
getResourcein classClassLoader
-
getResources
public Enumeration<URL> getResources(String name) throws IOException
- Overrides:
getResourcesin classClassLoader- Throws:
IOException
-
getURLs
public URL[] getURLs()
- Overrides:
getURLsin classURLClassLoader
-
-