Let's talk about java class loader

Post on 13-Jan-2017

981 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

Transcript

Let’s talk about Java ClassLoaderYongqiang

Previously… (about 3 years ago) Let’s talk about JNI Let’s talk about Java Class File

What’s ClassLoader? A class loader is an object that is

responsible for loading classes. Without classloader, no class can be

loaded and run in JVM. Classes are loaded into JVM and by

demand (lazy initialization) Each ClassLoader has a parent, except

the bootstrap one.

Parent-Child Structure of ClassLoader

•Load Java Core libraries (jre/lib/rt.jar)• Implemented by C++•not derived from java.lang.ClassLoader•No parent

Bootstrap Class Loader

•Load Java Extension (jre/ext/*.jar)Extensions

Class Loader

•Load libraries defined in CLASSPATHSystem Class Loader

•Custom class loader derived from java.lang.ClassLoaderCustom Class Loader

Bootstrap class loader

Extensions class loader

System class loader

Custom class loader1

Custom class loader2

Default Loaders

Custom class loader3

APIs on ClassLoader• Get parent class loader.getParent()

• Load the class by given name, return a class instance.loadClass(String name)

• Find the class by given name, return a class instance findClass(String name)

• Find the loaded class by given namefindLoadedClass(String name)

• Generate class instance from its binary representation• Final function

defineClass(Strign, byte[] b, int off, int len)

• Link given classresolveClass(Class<?> c)

Function of loadClass()

Function of findClass (in URLClassLoader)

URLClassLoader Sample

org.yli.test.jar

Q: If urlClassLoader3 loads class A first, will the output be changed?

More… “Jar Hell”

Package A Package B

org.yli.test0.1

org.yli.test0.2

Package C Q: Any Solution?

OSGi ClassLoader

To be continued…

top related