Professional Diving Insurance Commercial Diving Questionnaire
Diving into Java Class Loader
-
Upload
md-imran-hasan-hira -
Category
Software
-
view
574 -
download
1
Transcript of Diving into Java Class Loader
@KonaTechAdda - 6
What is Class Loader ন িঃস্বার্থ ক্লাশ-ল াডার
Md Imran Hasan Hira
Software Engineer
Kona Software Lab Ltd.
http://bd.linkedin.com/in/imranhasanhirahttps://www.linkedin.com/company/kona-software-lab-ltd-
Part 1 – Brunch
Part 2 – Buffet Dinner
Java Class Bytecodes JVM
ClassLoading Example Loading Phases
Delegation Model Class Loading exceptions
References
Title Reference
Demystifying class loading problems, Part 1: An introduction to class loading and debugging tools
http://www.ibm.com/developerworks/library/j-dclp1/
The basics of Java class loaders http://www.javaworld.com/article/2077260/learn-java/learn-java-the-basics-of-java-class-loaders.html?null
Java Classloaders Tutorial http://zeroturnaround.com/rebellabs/rebel-labs-tutorial-do-you-really-get-classloaders/
Core Java Security: Class Loaders, Security Managers, and Encryption
http://www.informit.com/articles/article.aspx?p=1187967
Java Class Loader - Java Tutorial http://javapapers.com/core-java/java-class-loader/
Inside Class Loaders - O'Reilly Media http://www.onjava.com/pub/a/onjava/2003/11/12/classloader.html
Discovering Class Members (The Java™ Tutorials > The Reflection API > Classes)
https://docs.oracle.com/javase/tutorial/reflect/class/classMembers.html
Index
• What is Java ? How it runs on PC ?
• Different Java Virtual Machines
• A close look at the bytecodes
• Introduction to class loader
• Building the information from bytecode
• Maintaining the class loading chain
What we know java is
Java
Java Technology
Java Programming
Language
Object Oriented
Write once, Run Everywhere
GreenTalk > Oak > Java
A detail history can be found in http://oracle.com.edgesuite.net/timeline/java/
GreenTalk
• James Gosling initiated a project as Green Team
• Firstly it was called GreenTalk and file extension was .gt
Oak
• After that it was called Oak and developed as part of the Green Project
• Oak is a symbol for strength
Java
• Oak renamed to Java for trademark issue with Oak Technologies
• Java was chosen amongst Silk, Jolt, DNA etc.
How java works
Main.java
Main.cpp Operating System
.classOperating
System
Java Virtual Machine
(JVM)
C/C++ source fileNative executable
.exe
OS executes the machine code
Java source file Java intermediate bytecodes
JVM interprets* the bytecodes
What does JVM do?
bytecodes
Amazing Things
Code Interpretation
Native Instruction mapping Type Conversion
Memory Management
Garbage Collection
Disk/Network access
Security Management
Virtual Machines
• Hotspot JVM (OpenJDK)
• Hotspot JVM (Oracle JDK)
• J9 by IBM
• Apache Harmony
• Kaffe OpenVM
• NanoVM
…
Takes classname(i.e. com.konasl.test.Welcome)
Find the bytecode data associated with this classname
Use defineClass() to decode raw bytecode into Class
Return the Class
Simple Class Loading Procedure
Takes classname(i.e. com.konasl.test.Welcome)
Find the bytecode data associated with this classname
Use defineClass() to decode raw bytecode into Class
Return the Class
Find in self cache for this class
Put the Class in self cache
Simple Class Loading Procedure (cont.)
Takes classname(i.e. com.konasl.test.Welcome)
Find the bytecode data associated with this classname
Use defineClass() to decode raw bytecode into Class
Use resolveClass() to resolve the other referenced classes
Return the Class
Find in super classloaders for this class
Find in self cache for this class
Put the Class in self cache
Simple Class Loading Procedure (cont.)
Class Loader chain
• Bootstrap Class Loader• <JAVA_HOME>/jre/lib
• Part of the core JVM, written in native code
• Extension Class Loader• <JAVA_HOME>/jre/lib/ext
• java.ext.dirs.
• Implemented by sun.misc.Launcher$ExtClassLoader
• System Class Loader• <CLASSPATH>
• java.class.path
• Implemented by the sun.misc.Launcher$AppClassLoader
Class Loader Delegation Model
Bootstrap Class Loader
Extension Class Loader
System Class Loader
User Defined Class Loader
User Defined Class Loader
User Defined Class Loader
Class Loader Delegation Model
Bootstrap Class Loader
Extension Class Loader
System Class Loader
User Defined Class Loader
User Defined Class Loader
User Defined Class Loader
$JAVAHOME/jre/lib/rt.jarKnown as
Primordial Class Loader
Class Loader Delegation Model
Bootstrap Class Loader
Extension Class Loader
System Class Loader
User Defined Class Loader
User Defined Class Loader
User Defined Class Loader
$JAVAHOME/jre/lib/rt.jar
$JAVAHOME/jre/lib/ext/*.jar
$CLASSPATH
defineClass()
resolveClass()
findInParentClass()
findLoadedClass()
Put the Class in self cache
Simple class loading procedure
loadClass()
findClass()
Phases of Class Loading
LoadingVerifying
Preparing
Resolving
Initializing
Linking
1. Bringing Binary data from a class into
JVM
Phases of Class Loading
LoadingVerifying
Preparing
Resolving
Initializing
Linking
1. Bringing Binary data from a class into
JVM
2. Incorporating the binary data into the runtime state of the JVM
Phases of Class Loading
LoadingVerifying
Preparing
Resolving
Initializing
Linking
1. Bringing Binary data from a class into
JVM
2. Incorporating the binary data into the runtime state of the JVM
2.1 Ensure class is properly formed and fit for use by the
JVM
Phases of Class Loading
LoadingVerifying
Preparing
Resolving
Initializing
Linking
1. Bringing Binary data from a class into
JVM
2. Incorporating the binary data into the runtime state of the JVM
2.1 Ensure class is properly formed and fit for use by the
JVM
2.2 Allocating memory needed by the Class
Phases of Class Loading
LoadingVerifying
Preparing
Resolving
Initializing
Linking
1. Bringing Binary data from a class into
JVM
2. Incorporating the binary data into the runtime state of the JVM
2.1 Ensure class is properly formed and fit for use by the
JVM
2.2 Allocating memory needed by the Class 3. Class variables are given
their proper initial values
Phases of Class Loading
LoadingVerifying
Preparing
Resolving
Initializing
Linking
1. Bringing Binary data from a class into
JVM
2. Incorporating the binary data into the runtime state of the JVM
2.1 Ensure class is properly formed and fit for use by the
JVM
2.2 Allocating memory needed by the Class
2.3 Transforming symbolic references in the constant
pool, into direct references
3. Class variables are given their proper initial values
Explicit Loading vs Implicit Loading
ClassLoader.loadClass()
Class.forName()
Class A
Class B Class CReference
Inheritance
Instantiation
Explicit Loading
Implicit Loading
…
…
ClassNotFoundException
NoClassDefFoundException
ClassFormatError
ClassCastException
ClassCircularityError
The Exceptions
ClassNotFoundException
• These calls below and the class is not found• Class.forName()
• ClassLoader.findSystemClass()
• ClassLoader.loadClass()
• N.B. Unsuccessful Explicit attempt to load class
NoClassDefFoundException
• JVM or CL instance tries to load class and the class is not found while• in regular method call
• creating a new instance using the ‘new’
• N.B. Unsuccessful Implicit class load
ClassCastException
• Casting an object to a subclass of which it is not an instance.• i.e. Integer val = (Integer) new String(“1234”);
• or
UnsatisfiedLinkError
• Java Virtual Machine cannot find an appropriate native language definition of a method declared native. i.e.
ClassCircularityError
• Java Virtual Machine cannot find an appropriate native language definition of a method declared native. i.e.
Class A
Class B extends A
Class B
Class A extends B
A.class B.class A.class B.class
B.class A.classTry to load this two classes
Power of Class Loader
•Dynamically loading desired classes• Loading different versions of the classes•Generating new class definitions on the fly•Verify custom code signature before executing
code•Use encrypted* bytecodes in program
Most of the programs don’t need to mess with Class Loader.