SlideShare a Scribd company logo
Java Performance
       artdb@ex-em.com | performeister.tistory.com | twitter @novathinker




Class Loader
Java Performance
                                                                                      2

                             artdb@ex-em.com | performeister.tistory.com | twitter @novathinker


ClassLoader
   1)   Dynamic Linking
   2)   Namespace
   3)   Delegation Model
   4)   Classloader Tree in WAS
ClassLoader Work
   1)   ClassLoader Work
   2)   Loading
   3)    Linking
        (1) Verification
        (2) Preparation
        (3) Resolution
   4)   Initialization
Java Performance
        artdb@ex-em.com | performeister.tistory.com | twitter @novathinker




Class Loader
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
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
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
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            .
Java Performance
                                                                     8
                  Java Performance Fundamental | twitter @novathinker
                               artdb@ex-em.com | performeister.tistory.com
    ClassLoader



• Namespace
  –         Class Loader              Namespace



 Classloader                             Classloader
      1                                       2
                      Namespace
                                                             Namespace
            exem.package.jvmclass




            exem.package.jvmclass               exem.package.jvmclass
Java Performance
                                                                     8
                  Java Performance Fundamental | twitter @novathinker
                               artdb@ex-em.com | performeister.tistory.com
    ClassLoader



• Namespace
  –         Class Loader              Namespace



 Classloader                             Classloader
      1                                       2
                      Namespace
                                                             Namespace
            exem.package.jvmclass




            exem.package.jvmclass               exem.package.jvmclass
Java Performance
                                                                     8
                  Java Performance Fundamental | twitter @novathinker
                               artdb@ex-em.com | performeister.tistory.com
    ClassLoader



• Namespace
  –         Class Loader              Namespace



 Classloader                             Classloader
      1                                       2
                      Namespace
                                                             Namespace
            exem.package.jvmclass                exem.package.jvmclass




            exem.package.jvmclass
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
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
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
Java Performance
                                                                   10
                Java Performance Fundamental | twitter @novathinker
                             artdb@ex-em.com | performeister.tistory.com
  Classloader



• Delegation Model
  – Classloder
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
Java Performance
                                                                   12
                Java Performance Fundamental | twitter @novathinker
                             artdb@ex-em.com | performeister.tistory.com
  Classloader



• Delegation Model
  – Delegation Model
      •        classloader bootstrap
          parent
      •   Class              CacheParentSelf
      •   Class loading                  (delegation)
      •          classloader       default system
          classloader
      •          Parent                system
          classloader child
      •
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
                – bootstrapextensionsystemuser-defined
                –                   Class       bootstap
                  extension          class path
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
                – bootstrapextensionsystemuser-defined
                –                   Class       bootstap
                  extension          class path
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
Java Performance
                                                                   16
                Java Performance Fundamental | twitter @novathinker
                             artdb@ex-em.com | performeister.tistory.com
  Classloader




• Classloader Tree in WAS
Java Performance
                                                                   17
                Java Performance Fundamental | twitter @novathinker
                             artdb@ex-em.com | performeister.tistory.com
  Classloader




• Classloader Tree in WAS
Java Performance
                                                                    18
                 Java Performance Fundamental | twitter @novathinker
                              artdb@ex-em.com | performeister.tistory.com
  Classloader




• Class Sharing
  – Jvm                                  Load             Class
  – ClassLoader CacheParentShared Class File
    System

                                               Shared Class




                                Class
        JVM1

                JVM2


                       JVM3




                               Sharing
                                            JVM1

                                                   JVM2


                                                           JVM3
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
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
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
Java Performance
          artdb@ex-em.com | performeister.tistory.com | twitter @novathinker




Class Loader Work
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
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
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
Java Performance
                                                                        26
                     Java Performance Fundamental | twitter @novathinker
                                  artdb@ex-em.com | performeister.tistory.com
  Classloader Work




• Linking
  – Verification
        • Java language                   (semantic)
        • Verification                              Vendor
        • JVM         Verification
        • Exception
        •       Parse                       verification

               – File size
               – Superclass
        •                      Verification       Linking
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         ,
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)

                      »

                      »
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
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
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)
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
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)
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
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
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()
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
Java Performance
                                                                        37
                     Java Performance Fundamental | twitter @novathinker
                                  artdb@ex-em.com | performeister.tistory.com
  Classloader Work




• Initialization
  – Synchronization

        •                Thread      initialization
                      Thread                                 Thread
            Wait

        • Initialization                          Thread         notify
Java Performance
                                                   38
Java Performance Fundamental | twitter @novathinker
             artdb@ex-em.com | performeister.tistory.com

More Related Content

KEY
3장. Garbage Collection
KEY
2장. Runtime Data Areas
KEY
1장 Java란 무엇인가.key
PPT
Java Class Loader
PDF
GraalVM Overview Compact version
PPTX
Java 8 presentation
PDF
Java 9 New Features
KEY
JavaOne 2011 - JVM Bytecode for Dummies
3장. Garbage Collection
2장. Runtime Data Areas
1장 Java란 무엇인가.key
Java Class Loader
GraalVM Overview Compact version
Java 8 presentation
Java 9 New Features
JavaOne 2011 - JVM Bytecode for Dummies

What's hot (20)

PPTX
Karate for Complex Web-Service API Testing by Peter Thomas
PDF
Karate - Web-Service API Testing Made Simple
PDF
Testing Spring Boot Applications
PPTX
Ch13 整合 Spring MVC/Security
PPTX
Introduction to graphQL
PDF
Native Java with GraalVM
PPTX
Introduce yourself to java 17
PDF
07 java collection
PDF
Java8 features
PDF
Karate - powerful and simple framework for REST API automation testing
PPSX
Arrays in Java
PDF
An Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
PDF
Karate, the black belt of HTTP API testing?
PDF
Spring aop
PPTX
java 8 new features
PPTX
Java 11 to 17 : What's new !?
PDF
Deep Dive Java 17 Devoxx UK
PDF
Spring Framework - Core
PDF
Spring framework aop
Karate for Complex Web-Service API Testing by Peter Thomas
Karate - Web-Service API Testing Made Simple
Testing Spring Boot Applications
Ch13 整合 Spring MVC/Security
Introduction to graphQL
Native Java with GraalVM
Introduce yourself to java 17
07 java collection
Java8 features
Karate - powerful and simple framework for REST API automation testing
Arrays in Java
An Introduction to JUnit 5 and how to use it with Spring boot tests and Mockito
Karate, the black belt of HTTP API testing?
Spring aop
java 8 new features
Java 11 to 17 : What's new !?
Deep Dive Java 17 Devoxx UK
Spring Framework - Core
Spring framework aop
Ad

Similar to 4장. Class Loader (20)

PDF
0 E158 C10d01
PDF
0 E158 C10d01
DOC
Java Class Loading
KEY
6장 Thread Synchronization
PDF
Understanding ClassLoaders
PPTX
Diving into Java Class Loader
PPT
Packages and interfaces
PDF
Learn Java with Dr. Rifat Shahriyar
KEY
5 the final_hard_part
PDF
Use of Java™ Technology-Based Class Loaders to Design and Implement a Java P...
PDF
Android course session 5 (Threads & socket)
PPTX
Scala, Play 2.0 & Cloud Foundry
PPTX
inheritance.pptx
PPT
Core java
PDF
1669617800196.pdf
PDF
Java Interview Questions Answers Guide
PPTX
Java class loader
PPTX
White and Black Magic on the JVM
PPTX
Do you really get class loaders?
PPTX
2. Introduction to Java for engineering stud
0 E158 C10d01
0 E158 C10d01
Java Class Loading
6장 Thread Synchronization
Understanding ClassLoaders
Diving into Java Class Loader
Packages and interfaces
Learn Java with Dr. Rifat Shahriyar
5 the final_hard_part
Use of Java™ Technology-Based Class Loaders to Design and Implement a Java P...
Android course session 5 (Threads & socket)
Scala, Play 2.0 & Cloud Foundry
inheritance.pptx
Core java
1669617800196.pdf
Java Interview Questions Answers Guide
Java class loader
White and Black Magic on the JVM
Do you really get class loaders?
2. Introduction to Java for engineering stud
Ad

More from 김 한도 (6)

PDF
Big Data Myth 1. 우리 회사엔 빅데이터가 없어요
PDF
실시간 빅데이터와 머신 데이터
PDF
In memory as a data innovation
PDF
Facebook과 연동하기
KEY
7장 Oracle As Datasource
KEY
5장. Execution Engine
Big Data Myth 1. 우리 회사엔 빅데이터가 없어요
실시간 빅데이터와 머신 데이터
In memory as a data innovation
Facebook과 연동하기
7장 Oracle As Datasource
5장. Execution Engine

Recently uploaded (20)

PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Unlocking AI with Model Context Protocol (MCP)
PPT
Teaching material agriculture food technology
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
Big Data Technologies - Introduction.pptx
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Reach Out and Touch Someone: Haptics and Empathic Computing
Unlocking AI with Model Context Protocol (MCP)
Teaching material agriculture food technology
Digital-Transformation-Roadmap-for-Companies.pptx
Network Security Unit 5.pdf for BCA BBA.
Big Data Technologies - Introduction.pptx
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
MIND Revenue Release Quarter 2 2025 Press Release
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Agricultural_Statistics_at_a_Glance_2022_0.pdf
20250228 LYD VKU AI Blended-Learning.pptx
The Rise and Fall of 3GPP – Time for a Sabbatical?
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
NewMind AI Weekly Chronicles - August'25 Week I
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy

4장. Class Loader

  • 1. Java Performance artdb@ex-em.com | performeister.tistory.com | twitter @novathinker Class Loader
  • 2. Java Performance 2 artdb@ex-em.com | performeister.tistory.com | twitter @novathinker ClassLoader 1) Dynamic Linking 2) Namespace 3) Delegation Model 4) Classloader Tree in WAS ClassLoader Work 1) ClassLoader Work 2) Loading 3) Linking (1) Verification (2) Preparation (3) Resolution 4) Initialization
  • 3. Java Performance artdb@ex-em.com | performeister.tistory.com | twitter @novathinker Class Loader
  • 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 .
  • 8. Java Performance 8 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com ClassLoader • Namespace – Class Loader Namespace Classloader Classloader 1 2 Namespace Namespace exem.package.jvmclass exem.package.jvmclass exem.package.jvmclass
  • 9. Java Performance 8 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com ClassLoader • Namespace – Class Loader Namespace Classloader Classloader 1 2 Namespace Namespace exem.package.jvmclass exem.package.jvmclass exem.package.jvmclass
  • 10. Java Performance 8 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com ClassLoader • Namespace – Class Loader Namespace Classloader Classloader 1 2 Namespace Namespace exem.package.jvmclass exem.package.jvmclass exem.package.jvmclass
  • 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 CacheParentSelf • 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 – bootstrapextensionsystemuser-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 – bootstrapextensionsystemuser-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 CacheParentShared 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
  • 30. Java Performance 26 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Classloader Work • Linking – Verification • Java language (semantic) • Verification Vendor • JVM Verification • Exception • Parse verification – File size – Superclass • Verification Linking
  • 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
  • 42. Java Performance 37 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Classloader Work • Initialization – Synchronization • Thread initialization Thread Thread Wait • Initialization Thread notify
  • 43. Java Performance 38 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com