16
Let’s talk about Java ClassLoader Yongqiang

Let's talk about java class loader

Embed Size (px)

Citation preview

Page 1: Let's talk about java class loader

Let’s talk about Java ClassLoaderYongqiang

Page 2: Let's talk about java class loader

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

Page 3: Let's talk about java class loader
Page 4: Let's talk about java class loader

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.

Page 5: Let's talk about java class loader

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

Page 6: Let's talk about java class loader

Bootstrap class loader

Extensions class loader

System class loader

Custom class loader1

Custom class loader2

Default Loaders

Custom class loader3

Page 7: Let's talk about java class loader
Page 8: Let's talk about java class loader

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)

Page 9: Let's talk about java class loader

Function of loadClass()

Page 10: Let's talk about java class loader

Function of findClass (in URLClassLoader)

Page 11: Let's talk about java class loader

URLClassLoader Sample

org.yli.test.jar

Page 12: Let's talk about java class loader
Page 13: Let's talk about java class loader

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

Page 14: Let's talk about java class loader

More… “Jar Hell”

Package A Package B

org.yli.test0.1

org.yli.test0.2

Package C Q: Any Solution?

Page 15: Let's talk about java class loader

OSGi ClassLoader

To be continued…