Java Performance Fundamental 세미나 교재입니다. 4장은 Class Loader를 다루고 있습니다. Class Loader란 무엇이고 Class가 어떻게 JVM안으로 들어와 메모리의 일부로 동작하는지에 대해 상세하게 설명하고 있습니다. 그리고 Java 5에서 새로 소개된 Class Sharing에 대해서도 다루고 있습니다.
* Class Loader
o Namespace
o Class Loader Delegation Model
o Class Sharing
* Class Loader Work
o Loading
o Linking
o Initialization
4. Java Performance
4
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
ClassLoader
• Dynamic Linking
– Runtime Class
– Class Load
Link
– Link Classloader
– JVM
• Bootstrap Classloader
• Java Runtime Library (rt.jar)
• Object class
5. Java Performance
5
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
ClassLoader
• Dynamic Linking
– Loadtime dynamic loading
• class
public class Hello {
public static void main(String[] args) {
System.out.println(“Hello EXEM”);
}
}
• Java.lang.String, java.lang.System Hello class
loading loading
6. Java Performance
6
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
ClassLoader
• Dynamic Linking
– Runtime dynamic loading (reflection)
• Code
public class Hello {
public static void main(String[] args) {
Class cl = Class.forName(args[0]);
}
}
• Class.forName(args[0]) args[0]
Class
7. Java Performance
7
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
ClassLoader
• Namespace
– JVM Class Loading
– Class ?
1. Full Qualified Name .
Full Qualified Name = package name + class name
2. Classloader .
11. Java Performance
9
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
ClassLoader
• Namespace
– Symbolic Reference
– Class Load classloader
class loading
Class exemHello {
Class cl = Class.forName(exem.package.jvmclass);
}
Classloader Classloader
1 2
Namespace
exemHello
exem.package.jvmclass
12. Java Performance
9
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
ClassLoader
• Namespace
– Symbolic Reference
– Class Load classloader
class loading
Class exemHello {
Class cl = Class.forName(exem.package.jvmclass);
}
Classloader Classloader
1 2
Namespace
exemHello
exem.package.jvmclass
13. Java Performance
9
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
ClassLoader
• Namespace
– Symbolic Reference
– Class Load classloader
class loading
Class exemHello {
Class cl = Class.forName(exem.package.jvmclass);
}
Classloader Classloader
1 2
Namespace
exemHello
exem.package.jvmclass
14. Java Performance
10
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader
• Delegation Model
– Classloder
15. Java Performance
11
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader
• Delegation Model
– Classloader
• Bootstrap classloader
: classloader (no Parent)
: native implementation
: $JAVA_HOME/jre/lib/rt.jar
• Extension classloader
: class
: $JAVA_HOME/jre/lib/ext jar file
• System classloader
: Application classloader
: $CLASSPATH, java.class.path
16. Java Performance
12
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader
• Delegation Model
– Delegation Model
• classloader bootstrap
parent
• Class CacheParentSelf
• Class loading (delegation)
• classloader default system
classloader
• Parent system
classloader child
•
17. Java Performance
13
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader
• Delegation Model
– Class Loading
• Classloader loadClass()
(1) Class
(2) Load parent
(3) Parent findClass() call
• Classloader findClass()
– Current Classloader Class
• Delegation Class
– bootstrapextensionsystemuser-defined
– Class bootstap
extension class path
18. Java Performance
14
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader
• Delegation Model
– Class Loading
• Classloader loadClass()
(1) Class
(2) Load parent
(3) Parent findClass() call
• Classloader findClass()
– Current Classloader Class
• Delegation Class
– bootstrapextensionsystemuser-defined
– Class bootstap
extension class path
19. Java Performance
15
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader
• Classloader Tree in WAS
– EJB, WAR deploy classloader
• Isolating the Application from other
Applications
• Sharing Class between deployed modules
• Implementing multiple classloaders
20. Java Performance
16
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader
• Classloader Tree in WAS
21. Java Performance
17
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader
• Classloader Tree in WAS
22. Java Performance
18
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader
• Class Sharing
– Jvm Load Class
– ClassLoader CacheParentShared Class File
System
Shared Class
Class
JVM1
JVM2
JVM3
Sharing
JVM1
JVM2
JVM3
23. Java Performance
19
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader
• Class Sharing
– Hotspot JVM
• Shared Archive
• Jar Class JVM Memory
Mapped File
• Shared Library
• Client VM, Default Garbage Collector
24. Java Performance
20
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader
• Class Sharing
– IBM JVM
• Class Cache
• Class Cache JVM – JVM
Cache
• JVM Cache
• Cache
• Cache OS
25. Java Performance
21
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader
• Classloader Tree in WAS
– Path Parameter
• -Xbootclasspath:<path(s) or file(s)>
: Bootstrap classloader
• -Xbootclasspath/a:<path(s) or file(s)>
: boot classpath
• -Xbootclasspath/p:<path(s) or file(s)>
: boot classpath
• -Djava.ext.dirs=<path(s) or file(s)>
: Extension classloader
• -cp, -classpath <path(s) or file(s)>
-Djava.class.path=<path(s) or file(s)>
: System classloader
26. Java Performance
artdb@ex-em.com | performeister.tistory.com | twitter @novathinker
Class Loader Work
27. Java Performance
23
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Classloader Work
Link
Load Verify
Prepare
Resolve Initialize
28. Java Performance
24
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Classloader Work
– JVM class file loading, linking,
Initializing Runtime Memory Type
• Loading : binary type JVM
• Linking : JVM Runtime Binary type
data
– Verification : JVM
– Preparation: Type Memory
– Resolution : constant pool symbolic reference
29. Java Performance
25
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Loading
– Loading Process
• Acquistion
: java class file format file, network
• Parse
: method area parse
• java.lang.class instance
: class instance application jvm internal
data interface
31. Java Performance
27
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Linking
– Verification
•
– Final class subclass
– Final class override
– Abstract method
– Type superclass method ,
32. Java Performance
28
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Linking
– Verification
• Superclass, superinterface load
– constant pool
– Constant pool Class, Method
,Method descriptor String
– Bytecode (integrity)
»
»
33. Java Performance
29
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Linking
– Preparation
• , ,
• Class default
• Method table data
– Method table : Superclass method superclass
34. Java Performance
30
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Linking
– Preparation
Variable Type Default Value
int 0
long 0L
short (short)0
char ‘u0000’
byte (byte)0
reference null
float 0.0f
double 0.0d
Boolean
35. Java Performance
30
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Linking
– Preparation
Variable Type Default Value
int 0
long 0L
short (short)0
char ‘u0000’
byte (byte)0
reference null
float 0.0f
double 0.0d
Boolean Boolean primitive type
int (false default)
36. Java Performance
31
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Linking
– Resolution
• Type constant pool class, interface,
method, field symbolic reference direct
reference
• Eager lazy
– Loading Linking JVM
– , vendor
37. Java Performance
32
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Linking
– Resolution
• Eager lazy
– Eager : JVM Application Class
Loading, Linking
– Lazy : First Actual Use Loading, Linking
– Vendor Lazy
– 1.4 Eager
» Hotspot : -XX:+eagerinitializtion (1.4.1)
» IBM : -Dibm.cl.eagerresolution (1.4.2)
38. Java Performance
33
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Linking
– Resolution
• Actual Use
– Explicit loading
– Actual Use of class
» Class new instance
» Element type class array
» Class method
» Final static class
39. Java Performance
34
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Linking
– Resolution
• Actual Use
– Actual Use of interface
» Interface
• compile
Passive Use implicit
loading
40. Java Performance
35
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Initialization
– initial value class
• Value
– Class Initialization Step
• superclass initialized
superclass initializing
• Class class initialization method <clinit()
41. Java Performance
36
Java Performance Fundamental | twitter @novathinker
artdb@ex-em.com | performeister.tistory.com
Classloader Work
• Initialization
– Interface Initialization Step
• Interface superinterface initialization
initialization method
– Loading, Linking Initialization time
• First Active Use Initialization
• Loading, Linking Initialization