SlideShare una empresa de Scribd logo
1 de 95
Java Performance
          artdb@ex-em.com | performeister.tistory.com | twitter @novathinker




Runtime Data Areas
Java Performance
                                                                                   2

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




1) Runtime Data Area
2) PC Register
3) Java Stacks
4) Method Area
5) Java Heap
6) Native Method Stacks
7) Runtime Memory
Java Performance
                                                                                 3
                  Java Performance Fundamental | twitter @novathinker
                               artdb@ex-em.com | performeister.tistory.com
  Runtime Data Area



•Runtime Data Area


                 Class libraries           Class loader             Class files
                                            subsystem




                                                               Java Stacks
  Method Area            Heap         Pc Registers
                                                          Native Method Stacks


                                runtime data areas

                                                                     native
 Execution                   native method interface               method
  engine                                                           libraries
Java Performance
                                                                              4
                    Java Performance Fundamental | twitter @novathinker
                                 artdb@ex-em.com | performeister.tistory.com
  PC register



•PC Register

       Thread                             PC register              (Program Counter)



                Start                                     Create


 Java Method Call { … }                               Native Pointer
                                                              or




                                                   Current Instruction
                                                        Address
                                              (native pointer or method bytecode



  Native Method Call                                    undefined
Java Performance
                                                                       5
                    Java Performance Fundamental | twitter @novathinker
                                 artdb@ex-em.com | performeister.tistory.com
  Java Virtual Machine Stacks



•Java Virtual Machine Stack
Java Performance
                                                                         5
                      Java Performance Fundamental | twitter @novathinker
                                   artdb@ex-em.com | performeister.tistory.com
  Java Virtual Machine Stacks



•Java Virtual Machine Stack
         Java Stack




         Thread
Java Performance
                                                                         5
                      Java Performance Fundamental | twitter @novathinker
                                   artdb@ex-em.com | performeister.tistory.com
  Java Virtual Machine Stacks



•Java Virtual Machine Stack
         Java Stack




         Thread
         Java Stack




         Thread
Java Performance
                                                                         5
                      Java Performance Fundamental | twitter @novathinker
                                   artdb@ex-em.com | performeister.tistory.com
  Java Virtual Machine Stacks



•Java Virtual Machine Stack
         Java Stack




         Thread
         Java Stack




         Thread
         Java Stack




         Thread
Java Performance
                                                                              5
                      Java Performance Fundamental | twitter @novathinker
                                   artdb@ex-em.com | performeister.tistory.com
  Java Virtual Machine Stacks



•Java Virtual Machine Stack
         Java Stack
                                   Stack Frame       • Java Stack        Thread


                                                     • Stack Frame        Push, Pop




                                     Java Stack
         Thread

                                                                 Java Stack
         Java Stack




                                                     • Thread       1      Stack
                                                         Area
                                                     • Stack
         Thread

                                                         Thread
                                                     •          Thread
         Java Stack




                                                     • Implement         JVM Vendor


         Thread                   Thread
                                                     • Stack Frame
Java Performance
                                                                       6
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
 Java Virtual Machine Stacks



• Stack Frame

                                   • Local Variable Section, Operand
        Local Variable
           Section
                                     Stack              Compile Time

        Operand Stack


                                   • Frame Data
          Frame Data
                                   • Method      call      Class Data
      Stack Frame
                                                               Stack

                                     Frame                Java Stack
Java Performance
                                                                         7
                      Java Performance Fundamental | twitter @novathinker
                                   artdb@ex-em.com | performeister.tistory.com
    Java Virtual Machine Stacks



• Stack Frame
     – Local Variable Section

                                    • Zero base     Array
0
1
    Local Variable Section          • Index          data access
2
3    -Method Parameters
4    -Local variable                • Method Parameter
5
                                         index
                                    • Local Variable     Compiler
Java Performance
                                                                      8
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
 •    Java Virtual Machine Stacks



• Stack Frame
     – Local Variable Section
Java Performance
                                                                              9
                       Java Performance Fundamental | twitter @novathinker
                                    artdb@ex-em.com | performeister.tistory.com
     Java Virtual Machine Stacks



• Stack Frame
      – Local Variable Section
                                                  0     reference     hidden this

                                                  1        int        int a

                                                  2        int        char b
class JvmInternal {
                                                  3                   long c
public int        testMethod (int a, char b,              long
    long c, float d, Object e, double f,
    String g, byte h, short i, boolean j) {       5       float        float d
      return 0;                                   6     reference     Object e
 }
                                                  7                   double f
}                                                        double

                                                  9     reference     String g

                                                  10       int        byte h

                                                  11       int        short i

                                                  12       int        boolean j
Java Performance
                                                                      10
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
 Java Virtual Machine Stacks



• Stack Frame
  – Operand Stack

                                 • Zero base     Array

 Operand Stack                   • Instruction           pop
  -JVM Work Space
                                 •                 Push
                                 • Data Type      Local Variable
Java Performance
                                                                                11
                       Java Performance Fundamental | twitter @novathinker
                                    artdb@ex-em.com | performeister.tistory.com
       Java Virtual Machine Stacks
                                                  public void operandStack();
class JvmInternal2 {                                Code:
    public void operandStack() {                     0:   iconst_5
        int a, b, c;                                 1:   istore_1
        a = 5;                                       2:   bipush 6
        b = 6;                                       4:   istore_2
        c = a + b;                                   5:   iload_1
    }                                                6:   iload_2
}                                                    7:   iadd
                                                     8:   istore_3
                                                     9:   return

                                         istore_1istore_2iload_1 iload_2 iadd istore_3

                                                                  6
   Operand Stack
                                                           5      5      11


                   int c             3                                          11
    Local
   Variable        int b             2              6      6      6       6      6
   Section
                   int a             1      5       5      5      5       5      5
           hidden this        ref    0     ref     ref    ref     ref    ref    ref
Java Performance
                                                                      12
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
 Java Virtual Machine Stacks



• Stack Frame
  – Frame Data

                               Frame Data
                                -Constant pool
                                Resolution
                                -Normal Method Return
                                -Exception Dispatch
Java Performance
                                                                          12
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
 Java Virtual Machine Stacks



• Stack Frame
                                                        • Constant Pool   Entry
  – Frame Data
                                                        • Constant Pool
                                                        Symbolic Reference
                               Frame Data
                                -Constant pool
                                Resolution
                                -Normal Method Return
                                -Exception Dispatch
Java Performance
                                                                                  12
                           Java Performance Fundamental | twitter @novathinker
                                        artdb@ex-em.com | performeister.tistory.com
         Java Virtual Machine Stacks



     • Stack Frame
                                                                • Constant Pool   Entry
          – Frame Data
                                                                • Constant Pool
                                                                Symbolic Reference
                                       Frame Data
                                        -Constant pool
                                        Resolution
                                        -Normal Method Return
                                        -Exception Dispatch

• Method                 stack frame
                            pc
    register         instruction
    pointer
•
    operand stack          push
Java Performance
                                                                                  12
                           Java Performance Fundamental | twitter @novathinker
                                        artdb@ex-em.com | performeister.tistory.com
         Java Virtual Machine Stacks



     • Stack Frame
                                                                • Constant Pool   Entry
          – Frame Data
                                                                • Constant Pool
                                                                Symbolic Reference
                                       Frame Data
                                        -Constant pool
                                        Resolution
                                        -Normal Method Return
                                        -Exception Dispatch

• Method                 stack frame             • Exception
                            pc
                                                  Frame Data    Exception Table
    register         instruction
    pointer
•
    operand stack          push
Java Performance
                                                                             13
                        Java Performance Fundamental | twitter @novathinker
                                     artdb@ex-em.com | performeister.tistory.com
      Java Virtual Machine Stacks



  • Stack Frame
       – Frame Data
                                               public void operandStack();
                                                 Code:
                                                  0:   iconst_5
class JvmInternal2 {                              1:   istore_1
    public void operandStack() {                  2:   bipush 6
        int a, b, c;                              4:   istore_2
        a = 5;                                    5:   iload_1
        b = 6;                                    6:   iload_2
        try {                                     7:   iadd
              c = a + b;                          8:   istore_3
        }                                         9:   goto     16
        catch (NullPointerException e) {          12: astore 4
              c = 0;                              14: iconst_0
        }                                         15: istore_3
    }                                             16: return
}                                                Exception table:
                                                  from   to target type
                                                     5    9     12  Class java/lang/
                                               NullPointerException
Java Performance
                                                                      14
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
  Native Method Stack



•Native Method Stack

                        Java Stacks           Native
                                              Method
                                               Stack
Java Performance
                                                                      14
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
  Native Method Stack



•Native Method Stack

                        Java Stacks           Native
                                              Method
                                               Stack
                           Stack
     Java Method 1         Frame
Java Performance
                                                                      14
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
  Native Method Stack



•Native Method Stack

                        Java Stacks           Native
                                              Method
                                               Stack
                           Stack
     Java Method 1         Frame


   Native Method 1         Stack
                           Frame
Java Performance
                                                                      14
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
  Native Method Stack



•Native Method Stack

                        Java Stacks           Native
                                              Method
                                               Stack
                           Stack
     Java Method 1         Frame


   Native Method 1         Stack
                           Frame
Java Performance
                                                                      14
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
  Native Method Stack



•Native Method Stack

                        Java Stacks           Native
                                              Method
                                               Stack
                           Stack
     Java Method 1         Frame


   Native Method 1         Stack
                           Frame
                                                        Native Function
                                                        Call
Java Performance
                                                                      14
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
  Native Method Stack



•Native Method Stack

                        Java Stacks           Native
                                              Method
                                               Stack
                           Stack
     Java Method 1         Frame


   Native Method 1         Stack
                           Frame
                                                        Native Function
                                                        Call

                           Stack
                           Frame
Java Performance
                                                                      14
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
  Native Method Stack



•Native Method Stack

                        Java Stacks           Native
                                              Method
                                               Stack
                           Stack
     Java Method 1         Frame


   Native Method 1         Stack
                           Frame
                                                        Native Function
                                                        Call

                           Stack
                           Frame

                           Stack
     Java Method 2
                           Frame
Java Performance
                                                                    15
                Java Performance Fundamental | twitter @novathinker
                             artdb@ex-em.com | performeister.tistory.com
  Method Area



•Method Area
             JVM                 • Class Loader          Load      Type

      Method Area                • JVM
                                 •       Thread
     Class
     Data                        • Class file      type
                    Class
                    Data             Method Area
     Class                       • GC
     Data                        • Method Area            Vendor
                    Class
                    Data              Sun        Permanent Area
                                          Generation Heap
           Share
  Thread            Thread            IBM        Heap

           Thread
Java Performance
                                                                  16
               Java Performance Fundamental | twitter @novathinker
                            artdb@ex-em.com | performeister.tistory.com
 Method Area




                                Type Information

                                Constant Pool
Class metadata
      in                        Field Information
 Method Area
                                Method Information

                                Class Variables

                                Reference to ClassLoader

                                  class

                                Reference to Class class
Java Performance
                                                                        17
                     Java Performance Fundamental | twitter @novathinker
                                  artdb@ex-em.com | performeister.tistory.com
     Method Area



• Type Information

          Type Information

• Type                    (Package    + Class   )
• Type             Superclass
    (Type     interface         java.lang.object class    superclass


         )
• Type       class        interface
• Type       modifier (public, abstract, final)
•                  interface                        (      )
Java Performance
                                                                           17
                     Java Performance Fundamental | twitter @novathinker
                                  artdb@ex-em.com | performeister.tistory.com
     Method Area



• Type Information

          Type Information

• Type                    (Package    + Class   )
• Type             Superclass
    (Type     interface         java.lang.object class      superclass


         )
• Type       class        interface
• Type       modifier (public, abstract, final)
•                  interface                        (        )
               Type  Java Class, Interface
               Java Class File  Java Type               Standard Binary
    Format
Java Performance
                                                                           18
                        Java Performance Fundamental | twitter @novathinker
                                     artdb@ex-em.com | performeister.tistory.com
         Method Area



  • Constant Pool




• Constant Pool            Type               Constant       Ordered Set


• Literal Constant, Type, Field, Method                  Symbolic
 Reference
• Constant Pool            Entry     Array       index
• Type                             Type, Method, Field          Symbolic
 Reference             Dynamic Linking
Java Performance
                                                                     19
                  Java Performance Fundamental | twitter @novathinker
                               artdb@ex-em.com | performeister.tistory.com
    Method Area



• Field Information

             Field    Member Variable, Class Variable
             Type               Field




         Field Information

 • Field
 • Field Type
 • Field Modifier
  (public, private, protected, static, final, volatile, transient)
Java Performance
                                                                      20
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
   Method Area



• Method Information

            Type                   Method
            Method



     Method Information

 • Method
 • Method        Return Type (or void)
 • Method Parameter          Type (         )
 • Method Modifier
  (public, private, protected, static, final,
  syncronized, native, abstract)
Java Performance
                                                                             20
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
   Method Area



• Method Information

            Type                   Method
            Method



     Method Information
                                                Native or abstract
 • Method
                                                • Method   bytecode
 • Method        Return Type (or void)
                                                • Method Stack Frame
 • Method Parameter          Type (         )
                                                 Operand Stack       Local
 • Method Modifier
                                                 variable Section
  (public, private, protected, static, final,
                                                • Exception Table
  syncronized, native, abstract)
Java Performance
                                                                                 21
                    Java Performance Fundamental | twitter @novathinker
                                 artdb@ex-em.com | performeister.tistory.com
    Method Area



• Class Variable
                                                     Class Variable
            Class
                                           • Class         = Static
                                           •        instance          Instance


                                           •           Instance             Class
 Instance                    S
                                 ha
                                      re   • Class
                  Instance

 Instance
                                           • Final Class
                                               Constant Pool
                  Instance
Java Performance
                                                                             22
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
   Method Area



• Reference to class ‘ClassLoader’

      Reference                                          ClassLoader class



  •              Type       Type                  JVM        ClassLoader


  •                  Type   Classloader
  • User-Defined Classloader                      reference
  • Bootstrap Classloader                 null
  • JVM          Dynamic Linking                                  Class
      Classloader           Load
Java Performance
                                                                         23
                    Java Performance Fundamental | twitter @novathinker
                                 artdb@ex-em.com | performeister.tistory.com
      Method Area



• Reference to class ‘Class’

                                                       java.lang.class
       Reference                                            class




  •      Type       load         java.lang.class   instance
  • getClass, forClass, isInterface        Method                Reference
Java Performance
                                                                          24
                  Java Performance Fundamental | twitter @novathinker
                               artdb@ex-em.com | performeister.tistory.com
  Method Area



• Method Table

      Method Area                • Class     Method            direct
                Class                reference
                                 • Method
       Method Table              • Method
                                 • Type      interface   abstract class

      Method                         class
                                 •       Class    Method
                   Field             superclass             Method
       Constant                      reference
         Pool
                                 • Class     Loading
Java Performance
                                                                        25
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
     Method Area



• Method Table

                                                    Class A
 Class A {
      void a1() {…}                      1   direct reference of a2()
      int      a2() {…}                  0   direct reference of a1()
 }
 Class B extends A{
                                                    Class B
      void a1() {…}
                                         2 direct reference of b1()
      char b1() {…}
                                         1 direct reference of a2()
 }
                                         0   direct reference of a1()
Java Performance
                                                                             26
                     Java Performance Fundamental | twitter @novathinker
                                  artdb@ex-em.com | performeister.tistory.com
      Method Area



• Method Table
                                                          Heap
Class A {              Class B extends A{
    void a1() {…}          void a1() {…}
    int   a2() {…}         char b1() {…}         B instance1
}                      }


                Method Area                                    A instance2
                    Class B
                       …




      2 direct reference of b1()
      1 direct reference of a2()                         bi
      0   direct reference of a1()
Java Performance
                                                                                27
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
   Java Heap



•Java Heap
        JVM                         • Instance        Array
                                    •         Thread
          Java Heap
                                    • JVM       Heap
                                        instruction           (new, newarray,
     Object
                    Instance            anewarray, multianewarray)
                      Data
                                    •                                  java code
      Class
     Pointer                            byte code
                        Array                             Garbage Collection
                                    •

               Share
                                    • Java Heap               Vendor
  Thread                Thread
                                               JVM Vendor        Heap
               Thread                         Garbage Collection, Garbage
                                              Collector
Java Performance
                                                                 28
              Java Performance Fundamental | twitter @novathinker
                           artdb@ex-em.com | performeister.tistory.com
  Java Heap



• Hotspot JVM             Heap Layout
  – Generational Heap
Java Performance
                                                                 29
              Java Performance Fundamental | twitter @novathinker
                           artdb@ex-em.com | performeister.tistory.com
  Java Heap



• Hotspot JVM             Heap Layout



                   Allocation


                                           Young Generation
                   Promotion

                                                   Old Generation
Java Performance
                                                                                   30
                                Java Performance Fundamental | twitter @novathinker
                                             artdb@ex-em.com | performeister.tistory.com
  Java Heap



• IBM JVM                            Heap Layout
  – One-Heap : IBM JVM                                  Default Heap Layout


       heapbase                                         heaplimit    heaptop


           Heap
        K Cluster

                    P Cluster




                                                                    Wilderness
                                               Heap         cache      or
                                                                      LOA
Java Performance
                                                                    31
                 Java Performance Fundamental | twitter @novathinker
                              artdb@ex-em.com | performeister.tistory.com
   Java Heap



• IBM JVM             Heap Layout
  – Kcluster : Pinned Class Object
       • Default 1280    class entries
       • 1    Class Entry 300byte(32it), 560byte(64bit)
  – Pcluster : Pinned Object
  – Kcluster                 Pcluster
  – Pcluster                 2KB              Pluster
  – Pcluster                                                    Heap

              Fragmentation
Java Performance
                                                                  32
               Java Performance Fundamental | twitter @novathinker
                            artdb@ex-em.com | performeister.tistory.com
  Java Heap



• IBM JVM           Heap Layout
  – Cache : Cache Allocation
  – Object             Thread
      • Thread    Heap                           Heap Lock
      • Heap Lock                      Thread
      •

  –           Object                       Cache Allocation
  – 512 Bytes                 Object
  –
Java Performance
                                                                  33
               Java Performance Fundamental | twitter @novathinker
                            artdb@ex-em.com | performeister.tistory.com
  Java Heap



• IBM JVM           Heap Layout
  – Large Object Area
      •   Large Object
      •   64KB        Object
      •   Heap
      •   -Xloratio        LOA
          (0.5 ~ 0.95        )
      •                 1MB        Object
Java Performance
                                                                 34
              Java Performance Fundamental | twitter @novathinker
                           artdb@ex-em.com | performeister.tistory.com
  Java Heap



• IBM JVM          Heap Layout
  – Heap
                   Garbage Object     Live Object
Java Performance
                                                                 35
              Java Performance Fundamental | twitter @novathinker
                           artdb@ex-em.com | performeister.tistory.com
  Java Heap



• IBM JVM          Heap Layout
  – Sub pool
      • Java 1.4
      • 16 Core            SMP                Allocation

      • Free Chunk                      FreeList
Java Performance
                                                                               36
                     Java Performance Fundamental | twitter @novathinker
                                  artdb@ex-em.com | performeister.tistory.com
       Java Heap



 • IBM JVM                    Heap Layout
       – Sub Pool



Pool

 1                 Small Size Freelist                  Middle Size Freelist

 2
 3
 4
 5
 …




                                         Large Size Freelist
 n
Java Performance
                                                                 37
              Java Performance Fundamental | twitter @novathinker
                           artdb@ex-em.com | performeister.tistory.com
  Java Heap



• IBM JVM          Heap Layout
  – Java 5                             Heap
  –           Heap        Generational Heap
  – -Xgcpolicy: gencon



      Allocation Space    Survivor Space     Tenured Space




                   Nursery                       Tenured
Java Performance
                                                                                                38
                                           Java Performance Fundamental | twitter @novathinker
                                                        artdb@ex-em.com | performeister.tistory.com
        Java Heap



• Hotspot JVM                                          Object Layout

                                                                  •       Object    Mark Word,
              Class Address
  Mark Word




                                                                      Class Address
                                             Object Data
                                                                      Header
                                                                  • Array          Size
                                                                        Header              !
              Class Address
  Mark Word




                              Array Size




                                                                  •     Header     1 Word
                                                Array Data

                                                                       1Word = 4bytes(32bit)
                                                                               8bytes(64bit)
Java Performance
                                                                           39
                  Java Performance Fundamental | twitter @novathinker
                               artdb@ex-em.com | performeister.tistory.com
      Java Heap



• Hotspot JVM                      Object Layout
    – Mark Word : Garbage Collection, Synchronization

                                          Hash Code (0)
              Mark Word                   Thread ID (1)   Age     Biased        Tag

                                             23 bit       6 bit   1 bit         2 bit


Hash Code (0)
                  Age     Biased   Tag   Biased bit Tag
Thread ID (1)
                                            0         01 Unlocked
    (000) Lock Record Address               0         00 Light-weight locked

      (010) Monitor Address                 0         10 Heavy-weight locked
                                            0         11 Marked for GC
  (011) Forwarding Address                  1         01 Biased / Biasable
Java Performance
                                                                   40
               Java Performance Fundamental | twitter @novathinker
                            artdb@ex-em.com | performeister.tistory.com
  Java Heap



• Hotspot JVM                Object Layout


   Class Address
                         Method Area   Object Class    Reference




                                                      Array Size
              Array Object
              Array Data
Java Performance
                                                                               41
                    Java Performance Fundamental | twitter @novathinker
                                 artdb@ex-em.com | performeister.tistory.com
       Java Heap



 • IBM JVM              Object Layout
     – Object  Array
     –   header 1 Word

                                                            Garbage Collection
                                                            (2bits) bit (2bits)
                                                            Pinned
  Size+Flags                     Object Size         G P

     mptr                   Class pointer or array size
                             Thread Index   Count
                                                            Array bit (1bit)
   locknflags            S                           H T A
                               Monitor Index
                                                             Type(5bits)
Monitor Shape bit
                                   Object Data              Hash code state (2bits)
     (1bit)

                                    Hash code
Java Performance
                                                                 42
              Java Performance Fundamental | twitter @novathinker
                           artdb@ex-em.com | performeister.tistory.com
  Java Heap



• IBM JVM          Object Layout
  – Size+Flag
      • 28 Bits : Object Size
      •      2 Bits : Multipinned Bit,
        Garbage Collection        - Compaction
        Swapped Bit
      • Pinned Bit : 1 Bit
      • Dosed Bit : 1 Bit

                        Garbage Collection (2bits)


                 Object Size       G P    Pinned bit (2bits)
Java Performance
                                                                 43
              Java Performance Fundamental | twitter @novathinker
                           artdb@ex-em.com | performeister.tistory.com
  Java Heap




• IBM JVM            Object Layout
 – mptr : Method Pointer
 – 1word              8byte
 – Object               Method Table                    Pointer
 – Array                Array


                              mptr
Java Performance
                                                                                 44
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
     Java Heap



• IBM JVM             Object Layout
    – locknflags : lock
    – 1 word
    – Fat Lock                  Monitor Index       23 bits
    – Thin Lock                  15 Bits Thread Index, 8 bits count
    –            5 Bits       Lock


                               Thread Index   Count
                                                              Array bit (1bit)
   locknflags              S                           H T A
                                Monitor Index
                                                               Type(5bits)
Monitor Shape bit
     (1bit)                                                   Hash code state (2bits)
Java Performance
                                                                      45
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
  Java Heap



• IBM JVM                         Object Layout (Java 5~)
  –       header                            1 Word
                   Lock word
          VTable




                                                 Object Data
                   Lock word

                               Array Size
          VTable




                                                     Array Data
Java Performance
                                                                     46
              Java Performance Fundamental | twitter @novathinker
                           artdb@ex-em.com | performeister.tistory.com
  Java Heap



• IBM JVM          Object Layout (Java5 ~)
  – Vtable           Pointer
  – Vtable        Object Information Table                  Pointer



                                               Object Information
                                             • Debug Data
   VTable                   OI               • Class name
                                             • Object Type (Array,
                                             Object)
                                             • Reference field
                                             • Object Size
                                               Array Element
                                             • Offset Information
Java Performance
                                                                              47
                    Java Performance Fundamental | twitter @novathinker
                                 artdb@ex-em.com | performeister.tistory.com
   Java Heap



• IBM JVM               Object Layout (Java5 ~)
  –   Lock Word
  –   1 bit : Object         on  Fat Lock
  –   Fat Lock : 20 bits Monitor Index
  –   Reserved Mode : Thread ID (15 bits), Count(5 bits)
  –   Reserved Mode       Locked        1
  –   Garbage Collector             Hash Code (10 bits)

                                                 Recursion Count (5
                                                        bits)
                   Thread ID (15 bits)   Count       Hash Code
               0                                 1    (10 bits)
                     Monitor index (20 bits)

                    Contention Bit (1bit)            Reservation Bit (1bit)
Java Performance
                                                                  48
               Java Performance Fundamental | twitter @novathinker
                            artdb@ex-em.com | performeister.tistory.com
   Java Heap



• Array in Heap
  – Array      Object     Heap
  – Array      Array Class instance
  –                 Type     Array       Class data
  – Array                    Instance data
  –        Array Array Array
  – Class Data Naming Convention
       • ‘[‘                       Type Description String
Java Performance
                                                                   49
               Java Performance Fundamental | twitter @novathinker
                            artdb@ex-em.com | performeister.tistory.com
   Java Heap



• Array in Heap
  – Type Description String

Descriptor      Type              Array               Class Data
    B           Byte     byte[]                [B
    C           Char     char[][]              [[C
    D          Double    double[]              [D
     F          Float    float[][]             [[F
     I           Int     int[][][]             [[[I
     J          Long     long[]                [J
     S          Short    short[][]             [[S
    Z          Boolean   boolean[][][]         [[[Z
     L         Object    java.lang.String[] [Ljava/lang/String
Java Performance
                                                                      50
                Java Performance Fundamental | twitter @novathinker
                             artdb@ex-em.com | performeister.tistory.com
   Java Heap



• Array in Heap
  Java Heap
                                             Class Data Pointer
                                                 Length (=2)
           Class Data   Pointer                 ar1[0][0] ( int )
                                                ar1[0][1] ( int )
               Length ( =2)
         ar1[0] (array reference)            Class Data Pointer
         ar1[1] (array reference)                Length (=2)
                                                ar1[1][0] ( int )
                                                ar1[1][1] ( int )



                                        Method Area
         ar1    Array Reference
                                                 Class        Class
                                                 Data         Data
 int [][] ar1 = new int [2][2]                    [[I          [I
Java Performance
                                                                         51
                   Java Performance Fundamental | twitter @novathinker
                                artdb@ex-em.com | performeister.tistory.com
      Runtime Memory



• Java           Variables
  –    Class Variables
  –    Member Variables
  –    Parameter Variables
  –    Local Variables


          D:EXEM>type VariableArrange.java
          class VariableArrange {
                  static int ci = 3;             //   Class Variable
                  static String cs = "Static";   //   Class Variable
                  int mi = 4;                    //   Member Variable
                  String ms = "Member";          //   Member Variable

              void method(int pi, String ps) {   // Parameter Variable
                          int li = 5;            // Local Variable
                          String ls = "Local";   // Local Variable
                  }
          }
Java Performance
                                                                                 52
             Java Performance Fundamental | twitter @novathinker
Runtime Memory            artdb@ex-em.com | performeister.tistory.com




     Java Stack             Java Heap                Method Area
                                                    [Ljava/lang/String
                      VariableArrange Instance
    method frame
                                                    VariableArrange
   Local Variable              mi = 4
                               ms = ref2                 class
                                                    Field Information
     3    ls=ref4         String Instance : ref1
                                  “Static”            Class Variable
     2      li=5                                   ci             3
                          String Instance : ref2
                                “Member”
     1       ps                                    method informations
                          String Instance : ref3        VariableArrange();
     0       pi                                      void method(int, String);
                                                             static {};
                          String Instance : ref4
                                  “Local”             Constant Pool




                    int             Integer                           …
Java Performance
                                                                       53
                    Java Performance Fundamental | twitter @novathinker
                                 artdb@ex-em.com | performeister.tistory.com
   Runtime Memory



JvmInternal.java




  JvmInternal.class        Bytecode
Java Performance
                                                                                  54
                        Java Performance Fundamental | twitter @novathinker
                                     artdb@ex-em.com | performeister.tistory.com
       Runtime Memory




Source      class JvmInternal { }                        bytecode
               Java Stack                  Java Heap            Method Area
JvmInternal frame
  Frame Data                               JvmInternal
                                             Instance
 Operand Stack
                                                              JvmInternal class

                                                               Field Information


 Local Variable                                                 Class Variable

                                                                    main method
                                                                    information

                                                              addTwoArgs method
                                                                  information

                                                                 Constant Pool
   0       args                                                fcv          100
Java Performance
                                                                                            55
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       static int cv = 0;                              bytecode 0: iconst_0
                Java Stack                    Java Heap                   Method Area
JvmInternal frame
   Frame Data                                 JvmInternal
                                                Instance                  [Ljava/lang/String
 Operand Stack
                                                                      JvmInternal class

                                                                          Field Information


 Local Variable                                                            Class Variable

                                                                            main method
                                                Length = 2                  information

                                                                     addTwoArgs method
                                           args[1]    “20”               information

                                          args[0]     “10”                  Constant Pool
    0       args                                                          fcv          100

ICONST - Push value between -1, ..., 5, other values cause an exception
Java Performance
                                                                                      56
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       static int cv = 0;                               bytecode 1: putstatic
                Java Stack                   Java Heap               Method Area
JvmInternal frame
   Frame Data                                JvmInternal
                                               Instance             [Ljava/lang/String
 Operand Stack
                                                                   JvmInternal class

                                                                    Field Information


 Local Variable                                                      Class Variable

                                                                      main method
                                               Length = 2             information

                                                                   addTwoArgs method
                                          args[1]    “20”              information

                                         args[0]     “10”             Constant Pool
    0       args                                                    fcv          100

PUTSTATIC - Put static field in class       #4; //Field cv:I
Java Performance
                                                                                       57
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       JvmInternal();                                    bytecode 0: aload_0
                Java Stack                      Java Heap            Method Area
JvmInternal frame
   Frame Data                                   JvmInternal
                                                  Instance           [Ljava/lang/String
 Operand Stack
                                                                    JvmInternal class

            args                                                     Field Information

                                                                      Class Variable
 Local Variable
                                                                       main method
                                                  Length = 2           information

                                                                    addTwoArgs method
                                             args[1]    “20”            information

                                             args[0]    “10”           Constant Pool
    0       args                                                     fcv          100

ALOAD - Load reference from local variable
Java Performance
                                                                                         58
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       public static void main(java.lang.String[]);    bytecode 1: invokespecial

                Java Stack                    Java Heap                Method Area
JvmInternal frame           main frame
   Frame Data               Frame Data        JvmInternal
                                                Instance              [Ljava/lang/String
 Operand Stack            Operand Stack
                                                                     JvmInternal class

            args                                                      Field Information


 Local Variable           Local Variable                                Class Variable

                            3                                           main method
                                                Length = 2              information
                            2                                       addTwoArgs method
                                           args[1]    “20”              information
                            1
                                           args[0]    “10”              Constant Pool
    0       args            0    args                                 fcv          100

INVOKESTATIC - Invoke instance method; special handling for superclass, private and instance
             initialization method invocations #1; //Method java/lang/Object."<init>":()V
Java Performance
                                                                                       59
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       a = Integer.parseInt(args[0]);                    bytecode 0: aload_0
                Java Stack                      Java Heap            Method Area
     main frame
    Frame Data                                  JvmInternal
                                                  Instance           [Ljava/lang/String
  Operand Stack
                                                                    JvmInternal class

             args                                                    Field Information


  Local Variable                                                      Class Variable

    3                                                                  main method
                                                  Length = 2           information
    2                                                               addTwoArgs method
                                             args[1]    “20”            information
    1
                                             args[0]    “10”           Constant Pool
    0        args                                                    fcv          100

ALOAD - Load reference from local variable
Java Performance
                                                                                            60
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       a = Integer.parseInt(args[0]);                  bytecode 1: iconst_0
                Java Stack                    Java Heap                   Method Area
     main frame
    Frame Data                                JvmInternal
                                                Instance                  [Ljava/lang/String
  Operand Stack
                                                                      JvmInternal class

           args[0]                                                        Field Information


  Local Variable                                                           Class Variable

    3                                                                       main Method
                                                Length = 2                  information
    2                                                                addTwoArgs method
                                           args[1]    “20”               information
    1
                                          args[0]     “10”                  Constant Pool
    0        args                                                         fcv          100

ICONST - Push value between -1, ..., 5, other values cause an exception
Java Performance
                                                                                    61
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       a = Integer.parseInt(args[0]);                 bytecode 2: aaload

                Java Stack                    Java Heap           Method Area
    main frame
   Frame Data                                 JvmInternal
                                                Instance          [Ljava/lang/String
  Operand Stack
                                                                 JvmInternal class
             “10”
           args[0]                                                Field Information


  Local Variable                                                   Class Variable

    3                                                               main Method
                                               Length = 2           information
   2                                                             addTwoArgs method
                                          args[1]    “20”            information
   1
                                         args[0]     “10”           Constant Pool
   0         args                                                 fcv          100

AALOAD - Load reference from array
Java Performance
                                                                                         62
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       a = Integer.parseInt(args[0]);                 bytecode 3: invokestatic
                Java Stack                    Java Heap                Method Area
     main frame
                                                                      java/lang/Integer
   Frame Data                                 JvmInternal
                                                Instance              [Ljava/lang/String
  Operand Stack
                                                                    JvmInternal class

              10                                                      Field Information


  Local Variable                                                        Class Variable

    3                                                                   main Method
                                               Length = 2               information
    2                                                               addTwoArgs method
                                          args[1]    “20”               information
    1
                                          args[0]    “10”               Constant Pool
    0        args                                                     fcv          100

INVOKESTATIC - Invoke a class (static) method
             #2; //Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
Java Performance
                                                                                         63
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       a = Integer.parseInt(args[0]);                      bytecode 6: istore_1
                Java Stack                      Java Heap               Method Area
     main frame
                                                                       java/lang/Integer
    Frame Data                                  JvmInternal
                                                  Instance             [Ljava/lang/String
  Operand Stack
                                                                      JvmInternal class

              10                                                       Field Information


  Local Variable                                                        Class Variable

    3                                                                    main Method
                                                    Length = 2           information
    2                                                                 addTwoArgs method
                                             args[1]       20             information
    1       a=10
                                            args[0]        10            Constant Pool
    0        args                                                      fcv          100

ISTORE - Store int from stack into local variable
Java Performance
                                                                                       64
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       b = Integer.parseInt(args[1]);                    bytecode 7: aload_0
                Java Stack                      Java Heap            Method Area
     main frame
                                                                     java/lang/Integer
   Frame Data                                   JvmInternal
                                                  Instance           [Ljava/lang/String
  Operand Stack
                                                                    JvmInternal class

            args                                                     Field Information


  Local Variable                                                      Class Variable

    3                                                                  main method
                                                  Length = 2           information
    2                                                               addTwoArgs method
                                             args[1]    “20”            information
    1       a=10
                                             args[0]    “10”           Constant Pool
    0        args                                                    fcv          100

ALOAD - Load reference from local variable
Java Performance
                                                                                            65
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       b = Integer.parseInt(args[1]);                  bytecode 8: iconst_1
                Java Stack                    Java Heap                   Method Area
     main frame
                                                                          java/lang/Integer
    Frame Data                                JvmInternal
                                                Instance                  [Ljava/lang/String
  Operand Stack
                                                                      JvmInternal class

           args[1]                                                        Field Information


  Local Variable                                                           Class Variable

    3                                                                       main Method
                                                Length = 2                  information
    2                                                                addTwoArgs method
                                           args[1]    “20”               information
    1       a=10
                                          args[0]     “10”                  Constant Pool
    0        args                                                         fcv          100

ICONST - Push value between -1, ..., 5, other values cause an exception
Java Performance
                                                                                    66
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       b = Integer.parseInt(args[1]);                 bytecode 9: aaload
                Java Stack                    Java Heap           Method Area
     main frame
                                                                  java/lang/Integer
   Frame Data                                 JvmInternal
                                                Instance          [Ljava/lang/String
 Operand Stack
                                                                 JvmInternal class
            “20”
           args[1]                                                Field Information


  Local Variable                                                   Class Variable

    3                                                               main Method
                                               Length = 2           information
   2                                                             addTwoArgs method
                                          args[1]    “20”            information
   1        a=10
                                         args[0]     “10”           Constant Pool
   0         args                                                 fcv          100

AALOAD - Load reference from array
Java Performance
                                                                                        67
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       b = Integer.parseInt(args[1]);                 bytecode 10: invokestatic
                Java Stack                    Java Heap               Method Area
     main frame
                                                                      java/lang/Integer
   Frame Data                                 JvmInternal
                                                Instance              [Ljava/lang/String
  Operand Stack
                                                                    JvmInternal class

              20                                                      Field Information


  Local Variable                                                       Class Variable

    3                                                                   main Method
                                               Length = 2               information
    2                                                               addTwoArgs method
                                          args[1]    “20”               information
    1       a=10
                                          args[0]    “10”              Constant Pool
    0        args                                                    fcv          100

INVOKESTATIC - Invoke a class (static) method
            #2; //Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
Java Performance
                                                                                          68
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       b = Integer.parseInt(args[1]);                      bytecode 13: istore_2
                Java Stack                      Java Heap               Method Area
     main frame
                                                                        java/lang/Integer
    Frame Data                                  JvmInternal
                                                  Instance             [Ljava/lang/String
  Operand Stack
                                                                      JvmInternal class

              20                                                       Field Information


  Local Variable                                                         Class Variable

    3                                                                    main Method
                                                    Length = 2           information
    2       b=20                                                      addTwoArgs method
                                             args[1]       20             information
    1       a=10
                                            args[0]        10            Constant Pool
    0        args                                                      fcv          100

ISTORE - Store int from stack into local variable
Java Performance
                                                                                        69
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       c = addTwoArgs(a,b);                               bytecode 14: iload_1
                Java Stack                        Java Heap            Method Area
     main frame
                                                                      java/lang/Integer
    Frame Data                                JvmInternal
                                                Instance              [Ljava/lang/String
  Operand Stack
                                                                     JvmInternal class

              10                                                      Field Information


  Local Variable                                                       Class Variable

    3                                                                   main Method
                                                   Length = 2           information
    2       b=20                                                     addTwoArgs method
                                           args[1]        20             information
    1       a=10
                                           args[0]        10            Constant Pool
    0        args                                                     fcv          100

ILOAD - Load int from local variable onto stack
Java Performance
                                                                                        70
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       c = addTwoArgs(a,b);                               bytecode 15: iload_2
                Java Stack                        Java Heap            Method Area
     main frame
                                                                      java/lang/Integer
    Frame Data                                JvmInternal
                                                Instance              [Ljava/lang/String
  Operand Stack
                                                                     JvmInternal class
              20
              10                                                      Field Information


  Local Variable                                                       Class Variable

    3                                                                   main Method
                                                   Length = 2           information
    2       b=20                                                     addTwoArgs method
                                           args[1]        20             information
    1       a=10
                                           args[0]        10            Constant Pool
    0        args                                                     fcv          100

ILOAD - Load int from local variable onto stack
Java Performance
                                                                                         71
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       c = addTwoArgs(a,b);                              bytecode 16:
                Java Stack                      Java Heap              Method Area
     main frame           addTwoArgs frame
                                                                       java/lang/Integer
   Frame Data               Frame Data          JvmInternal
                                                  Instance            [Ljava/lang/String
  Operand Stack             main
                             ref                                     JvmInternal class
              20
              10          Operand Stack                               Field Information


  Local Variable                                                        Class Variable

    3                                                                   main Method
                                                  Length = 2            information
                           Local Variable
    2       b=20                                                    addTwoArgs method
                                             args[1]     20             information
    1       a=10            1
                                             args[0]     10             Constant Pool
    0        args           0                                         fcv          100

INVOKESTATIC - Invoke instance method; special handling for superclass, private and instance
             initialization method invocations #3; //Method addTwoArgs:(II)I
Java Performance
                                                                                         72
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       static int addTwoArgs(int, int);                  bytecode 16:
                Java Stack                      Java Heap              Method Area
     main frame           addTwoArgs frame
                                                                       java/lang/Integer
   Frame Data               Frame Data          JvmInternal
                                                  Instance            [Ljava/lang/String
  Operand Stack             main
                             ref                                     JvmInternal class
              20
              10          Operand Stack                               Field Information


  Local Variable                                                        Class Variable

    3                                                                   main Method
                                                  Length = 2            information
                           Local Variable
    2       b=20                                                    addTwoArgs method
                                             args[1]     20             information
    1       a=10            1      20
                                             args[0]     10             Constant Pool
    0        args           0      10                                 fcv          100

INVOKESTATIC - Invoke instance method; special handling for superclass, private and instance
             initialization method invocations #3; //Method addTwoArgs:(II)I
Java Performance
                                                                                       73
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       cv = fcv ;                                        bytecode 0: bipush
                Java Stack                      Java Heap            Method Area
     main frame           addTwoArgs frame
                                                                     java/lang/Integer
  Operand Stack             Frame Data          JvmInternal
                                                  Instance           [Ljava/lang/String
                            main
                                     ref                            JvmInternal class
                             ref

                          Operand Stack                              Field Information


  Local Variable                                                      Class Variable
                                   100
    3                                                                  main Method
                                                  Length = 2           information
                           Local Variable
    2       b=20                                                    addTwoArgs method
                                             args[1]     20             information
    1       a=10            1      20
                                             args[0]     10            Constant Pool
    0        args           0      10                                fcv          100

BIPUSH - Push byte on stack,                  (-128~127)
Java Performance
                                                                                          74
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       cv = fcv ;                                          bytecode 2: putstatic
                Java Stack                      Java Heap               Method Area
     main frame           addTwoArgs frame
                                                                        java/lang/Integer
    Frame Data              Frame Data          JvmInternal
                                                  Instance             [Ljava/lang/String
  Operand Stack             main
                                     ref                              JvmInternal class
                             ref

                          Operand Stack                                Field Information

                                                                            Class Variable
  Local Variable                                                       cv              100
                                   100
    3                                                                       main Method
                                                  Length = 2                information
                           Local Variable
    2       b=20                                                      addTwoArgs method
                                             args[1]     20               information
    1       a=10            1      20
                                             args[0]     10              Constant Pool
    0        args           0      10                                  fcv          100

PUTSTATIC - Put static field in class          #4; //Field cv:I
Java Performance
                                                                                        75
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       return ( x + y );                                  bytecode 5: iload_0
                Java Stack                        Java Heap           Method Area
     main frame           addTwoArgs frame
                                                                      java/lang/Integer
    Frame Data              Frame Data          JvmInternal
                                                  Instance            [Ljava/lang/String
  Operand Stack             main
                                     ref                             JvmInternal class
                             ref

                          Operand Stack                               Field Information


  Local Variable                                                       Class Variable
                                   10
    3                                                                   main Method
                                                   Length = 2           information
                           Local Variable
    2       b=20                                                     addTwoArgs method
                                             args[1]      20             information
    1       a=10            1      20
                                             args[0]      10            Constant Pool
    0        args           0      10                                 fcv          100

ILOAD - Load int from local variable onto stack
Java Performance
                                                                                        76
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       return ( x + y );                                  bytecode 6: iload_1
                Java Stack                        Java Heap           Method Area
     main frame           addTwoArgs frame
                                                                      java/lang/Integer
    Frame Data              Frame Data          JvmInternal
                                                  Instance            [Ljava/lang/String
  Operand Stack             main
                                     ref                             JvmInternal class
                             ref

                          Operand Stack                               Field Information
                                   20
  Local Variable                                                       Class Variable
                                   10
    3                                                                   main Method
                                                   Length = 2           information
                           Local Variable
    2       b=20                                                     addTwoArgs method
                                             args[1]      20             information
    1       a=10            1      20
                                             args[0]      10            Constant Pool
    0        args           0      10                                 fcv          100

ILOAD - Load int from local variable onto stack
Java Performance
                                                                                       77
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       return ( x + y );                                 bytecode 7: iadd
                Java Stack                      Java Heap            Method Area
     main frame           addTwoArgs frame
                                                                     java/lang/Integer
   Frame Data               Frame Data          JvmInternal
                                                  Instance           [Ljava/lang/String
 Operand Stack              main
                                     ref                            JvmInternal class
                             ref

                          Operand Stack                              Field Information


  Local Variable                                                      Class Variable
                                   30
    3                                                                  main Method
                                                  Length = 2           information
                           Local Variable
    2       b=20                                                    addTwoArgs method
                                             args[1]     20             information
    1       a=10            1      20
                                             args[0]     10            Constant Pool
    0        args           0      10                                fcv          100

IADD - Add ints
Java Performance
                                                                                        78
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       return ( x + y );                                 bytecode 8: ireturn
                  Java Stack                    Java Heap             Method Area
     main frame           addTwoArgs frame
                                                                      java/lang/Integer
    Frame Data              Frame Data          JvmInternal
                                                  Instance           [Ljava/lang/String
  JvmInternal()
       ref         30       main
                                     ref
                             ref                                    JvmInternal class

  Operand Stack           Operand Stack                              Field Information
                          pop
                                                                          Class Variable
  Local Variable                                                     cv               100
                                   30
    3                                                                     main Method
                                                  Length = 2              information
                           Local Variable
   2        b=20                                                    addTwoArgs method
                                             args[1]     20             information
   1        a=10            1      20
                                             args[0]     10            Constant Pool
   0         args           0      10                                fcv          100

IRETURN - Return int from method
Java Performance
                                                                                          79
                         Java Performance Fundamental | twitter @novathinker
                                      artdb@ex-em.com | performeister.tistory.com
        Runtime Memory




Source       c = addTwoArgs(a,b);                                bytecode 19: istore_3
                Java Stack                      Java Heap               Method Area
     main frame
                                                                        java/lang/Integer
    Frame Data                                  JvmInternal
                                                  Instance             [Ljava/lang/String
  Operand Stack
                                                                      JvmInternal class

              30                                                       Field Information

                                                                            Class Variable
  Local Variable                                                       cv               100

    3       c=30                                                            main Method
                                                    Length = 2              information
    2       b=20                                                      addTwoArgs method
                                             args[1]       20             information
    1       a=10
                                            args[0]        10            Constant Pool
    0        args                                                      fcv          100

ISTORE - Store int from stack into local variable
Java Performance
                                                   80
Java Performance Fundamental | twitter @novathinker
             artdb@ex-em.com | performeister.tistory.com

Más contenido relacionado

La actualidad más candente

Java EE Introduction
Java EE IntroductionJava EE Introduction
Java EE Introductionejlp12
 
JVM for Dummies - OSCON 2011
JVM for Dummies - OSCON 2011JVM for Dummies - OSCON 2011
JVM for Dummies - OSCON 2011Charles Nutter
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)중선 곽
 
Java 10 New Features
Java 10 New FeaturesJava 10 New Features
Java 10 New FeaturesAli BAKAN
 
Unit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma introUnit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma introMaurice De Beijer [MVP]
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 
[오픈소스컨설팅]스카우터엑스 소개
[오픈소스컨설팅]스카우터엑스 소개[오픈소스컨설팅]스카우터엑스 소개
[오픈소스컨설팅]스카우터엑스 소개Open Source Consulting
 
Multi thread game server
Multi thread game serverMulti thread game server
Multi thread game serverOnGameServer
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootJosué Neis
 
IBM JVM GC_Wh apm
IBM JVM GC_Wh apmIBM JVM GC_Wh apm
IBM JVM GC_Wh apm엑셈
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonSeungmo Koo
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질Young-Ho Cho
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introductionRasheed Waraich
 
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트Amazon Web Services Korea
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot IntroductionJeevesh Pandey
 
오픈 소스 도구를 활용한 성능 테스트 방법 및 사례
오픈 소스 도구를 활용한 성능 테스트 방법 및 사례오픈 소스 도구를 활용한 성능 테스트 방법 및 사례
오픈 소스 도구를 활용한 성능 테스트 방법 및 사례MinWoo Byeon
 
Bytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte BuddyBytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte BuddyKoichi Sakata
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해Nam Hyeonuk
 

La actualidad más candente (20)

Java EE Introduction
Java EE IntroductionJava EE Introduction
Java EE Introduction
 
JVM for Dummies - OSCON 2011
JVM for Dummies - OSCON 2011JVM for Dummies - OSCON 2011
JVM for Dummies - OSCON 2011
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
Java 10 New Features
Java 10 New FeaturesJava 10 New Features
Java 10 New Features
 
Unit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma introUnit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma intro
 
Java 9 Features
Java 9 FeaturesJava 9 Features
Java 9 Features
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
[오픈소스컨설팅]스카우터엑스 소개
[오픈소스컨설팅]스카우터엑스 소개[오픈소스컨설팅]스카우터엑스 소개
[오픈소스컨설팅]스카우터엑스 소개
 
Multi thread game server
Multi thread game serverMulti thread game server
Multi thread game server
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
IBM JVM GC_Wh apm
IBM JVM GC_Wh apmIBM JVM GC_Wh apm
IBM JVM GC_Wh apm
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance Comparison
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introduction
 
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot Introduction
 
오픈 소스 도구를 활용한 성능 테스트 방법 및 사례
오픈 소스 도구를 활용한 성능 테스트 방법 및 사례오픈 소스 도구를 활용한 성능 테스트 방법 및 사례
오픈 소스 도구를 활용한 성능 테스트 방법 및 사례
 
Bytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte BuddyBytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte Buddy
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해
 
Java Basics
Java BasicsJava Basics
Java Basics
 

Destacado

Numbers and Values in Objective-C and C Programming
Numbers and Values in Objective-C and C ProgrammingNumbers and Values in Objective-C and C Programming
Numbers and Values in Objective-C and C ProgrammingPaul Solt
 
Big Data Myth 1. 우리 회사엔 빅데이터가 없어요
Big Data Myth 1. 우리 회사엔 빅데이터가 없어요Big Data Myth 1. 우리 회사엔 빅데이터가 없어요
Big Data Myth 1. 우리 회사엔 빅데이터가 없어요김 한도
 
Cpu cycle
Cpu cycleCpu cycle
Cpu cyclemaciakl
 
Authoring tools worksheet
Authoring tools worksheetAuthoring tools worksheet
Authoring tools worksheetFarid Diah
 
02 - Introduction to the cdecl ABI and the x86 stack
02 - Introduction to the cdecl ABI and the x86 stack02 - Introduction to the cdecl ABI and the x86 stack
02 - Introduction to the cdecl ABI and the x86 stackAlexandre Moneger
 
Python Yield
Python YieldPython Yield
Python Yieldyangjuven
 
Functions in Objective-C and C Programming
Functions in Objective-C and C ProgrammingFunctions in Objective-C and C Programming
Functions in Objective-C and C ProgrammingPaul Solt
 
Introduction to Linux Exploit Development
Introduction to Linux Exploit DevelopmentIntroduction to Linux Exploit Development
Introduction to Linux Exploit Developmentjohndegruyter
 
Exploit techniques and mitigation
Exploit techniques and mitigationExploit techniques and mitigation
Exploit techniques and mitigationYaniv Shani
 
Introduction to pointers and memory management in C
Introduction to pointers and memory management in CIntroduction to pointers and memory management in C
Introduction to pointers and memory management in CUri Dekel
 
Reversing & Malware Analysis Training Part 4 - Assembly Programming Basics
Reversing & Malware Analysis Training Part 4 - Assembly Programming BasicsReversing & Malware Analysis Training Part 4 - Assembly Programming Basics
Reversing & Malware Analysis Training Part 4 - Assembly Programming Basicssecurityxploded
 
Low Level Exploits
Low Level ExploitsLow Level Exploits
Low Level Exploitshughpearse
 
Debugging Applications with GNU Debugger
Debugging Applications with GNU DebuggerDebugging Applications with GNU Debugger
Debugging Applications with GNU DebuggerPriyank Kapadia
 
Advanced exploit development
Advanced exploit developmentAdvanced exploit development
Advanced exploit developmentDan H
 

Destacado (20)

Numbers and Values in Objective-C and C Programming
Numbers and Values in Objective-C and C ProgrammingNumbers and Values in Objective-C and C Programming
Numbers and Values in Objective-C and C Programming
 
Big Data Myth 1. 우리 회사엔 빅데이터가 없어요
Big Data Myth 1. 우리 회사엔 빅데이터가 없어요Big Data Myth 1. 우리 회사엔 빅데이터가 없어요
Big Data Myth 1. 우리 회사엔 빅데이터가 없어요
 
Cpu cycle
Cpu cycleCpu cycle
Cpu cycle
 
Authoring tools worksheet
Authoring tools worksheetAuthoring tools worksheet
Authoring tools worksheet
 
Wk1to4
Wk1to4Wk1to4
Wk1to4
 
02 - Introduction to the cdecl ABI and the x86 stack
02 - Introduction to the cdecl ABI and the x86 stack02 - Introduction to the cdecl ABI and the x86 stack
02 - Introduction to the cdecl ABI and the x86 stack
 
Python Yield
Python YieldPython Yield
Python Yield
 
Stack Frame Protection
Stack Frame ProtectionStack Frame Protection
Stack Frame Protection
 
Functions in Objective-C and C Programming
Functions in Objective-C and C ProgrammingFunctions in Objective-C and C Programming
Functions in Objective-C and C Programming
 
Smashing The Stack
Smashing The StackSmashing The Stack
Smashing The Stack
 
Introduction to Linux Exploit Development
Introduction to Linux Exploit DevelopmentIntroduction to Linux Exploit Development
Introduction to Linux Exploit Development
 
Exploit techniques and mitigation
Exploit techniques and mitigationExploit techniques and mitigation
Exploit techniques and mitigation
 
Introduction to pointers and memory management in C
Introduction to pointers and memory management in CIntroduction to pointers and memory management in C
Introduction to pointers and memory management in C
 
Addressing
Addressing Addressing
Addressing
 
Reversing & Malware Analysis Training Part 4 - Assembly Programming Basics
Reversing & Malware Analysis Training Part 4 - Assembly Programming BasicsReversing & Malware Analysis Training Part 4 - Assembly Programming Basics
Reversing & Malware Analysis Training Part 4 - Assembly Programming Basics
 
Low Level Exploits
Low Level ExploitsLow Level Exploits
Low Level Exploits
 
Debugging Applications with GNU Debugger
Debugging Applications with GNU DebuggerDebugging Applications with GNU Debugger
Debugging Applications with GNU Debugger
 
Virtual Machine Constructions for Dummies
Virtual Machine Constructions for DummiesVirtual Machine Constructions for Dummies
Virtual Machine Constructions for Dummies
 
The Stack Frame
The Stack FrameThe Stack Frame
The Stack Frame
 
Advanced exploit development
Advanced exploit developmentAdvanced exploit development
Advanced exploit development
 

Similar a 2장. Runtime Data Areas

6장 Thread Synchronization
6장 Thread Synchronization6장 Thread Synchronization
6장 Thread Synchronization김 한도
 
5장. Execution Engine
5장. Execution Engine5장. Execution Engine
5장. Execution Engine김 한도
 
Spring framework
Spring frameworkSpring framework
Spring frameworkAircon Chen
 
Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...
Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...
Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...srisatish ambati
 
Introduction to java by priti sajja
Introduction to java by priti sajjaIntroduction to java by priti sajja
Introduction to java by priti sajjaPriti Srinivas Sajja
 
Running JavaScript Efficiently in a Java World
Running JavaScript Efficiently in a Java WorldRunning JavaScript Efficiently in a Java World
Running JavaScript Efficiently in a Java Worldirbull
 
Javantura 2014 - Java 8 JavaScript Nashorn
Javantura 2014 - Java 8 JavaScript NashornJavantura 2014 - Java 8 JavaScript Nashorn
Javantura 2014 - Java 8 JavaScript NashornMiroslav Resetar
 
Polyglot Plugin Programming
Polyglot Plugin ProgrammingPolyglot Plugin Programming
Polyglot Plugin ProgrammingAtlassian
 
JRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVMJRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVMRaimonds Simanovskis
 
Scotas - Oracle Open World Sao Pablo
Scotas - Oracle Open World Sao PabloScotas - Oracle Open World Sao Pablo
Scotas - Oracle Open World Sao PabloJulian Arocena
 
7장 Oracle As Datasource
7장 Oracle As Datasource7장 Oracle As Datasource
7장 Oracle As Datasource김 한도
 
Java 8 selected updates
Java 8 selected updatesJava 8 selected updates
Java 8 selected updatesVinay H G
 

Similar a 2장. Runtime Data Areas (20)

6장 Thread Synchronization
6장 Thread Synchronization6장 Thread Synchronization
6장 Thread Synchronization
 
5장. Execution Engine
5장. Execution Engine5장. Execution Engine
5장. Execution Engine
 
Java Classroom Training
Java Classroom TrainingJava Classroom Training
Java Classroom Training
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...
Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...
Cache is King ( Or How To Stop Worrying And Start Caching in Java) at Chicago...
 
Java Online Training
Java Online TrainingJava Online Training
Java Online Training
 
Introduction to java by priti sajja
Introduction to java by priti sajjaIntroduction to java by priti sajja
Introduction to java by priti sajja
 
Euruko 2012 - JRuby
Euruko 2012 - JRubyEuruko 2012 - JRuby
Euruko 2012 - JRuby
 
Running JavaScript Efficiently in a Java World
Running JavaScript Efficiently in a Java WorldRunning JavaScript Efficiently in a Java World
Running JavaScript Efficiently in a Java World
 
Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar
Javantura Zagreb 2014 - Nashorn - Miroslav RešetarJavantura Zagreb 2014 - Nashorn - Miroslav Rešetar
Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar
 
Javantura 2014 - Java 8 JavaScript Nashorn
Javantura 2014 - Java 8 JavaScript NashornJavantura 2014 - Java 8 JavaScript Nashorn
Javantura 2014 - Java 8 JavaScript Nashorn
 
J2EE Online Training
J2EE Online TrainingJ2EE Online Training
J2EE Online Training
 
Java security
Java securityJava security
Java security
 
Polyglot Plugin Programming
Polyglot Plugin ProgrammingPolyglot Plugin Programming
Polyglot Plugin Programming
 
JRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVMJRuby - Programmer's Best Friend on JVM
JRuby - Programmer's Best Friend on JVM
 
Scotas - Oracle Open World Sao Pablo
Scotas - Oracle Open World Sao PabloScotas - Oracle Open World Sao Pablo
Scotas - Oracle Open World Sao Pablo
 
Jvm2
Jvm2Jvm2
Jvm2
 
Testing Tools Classroom Training
Testing Tools Classroom TrainingTesting Tools Classroom Training
Testing Tools Classroom Training
 
7장 Oracle As Datasource
7장 Oracle As Datasource7장 Oracle As Datasource
7장 Oracle As Datasource
 
Java 8 selected updates
Java 8 selected updatesJava 8 selected updates
Java 8 selected updates
 

Último

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 

Último (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 

2장. Runtime Data Areas

  • 1. Java Performance artdb@ex-em.com | performeister.tistory.com | twitter @novathinker Runtime Data Areas
  • 2. Java Performance 2 artdb@ex-em.com | performeister.tistory.com | twitter @novathinker 1) Runtime Data Area 2) PC Register 3) Java Stacks 4) Method Area 5) Java Heap 6) Native Method Stacks 7) Runtime Memory
  • 3. Java Performance 3 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Data Area •Runtime Data Area Class libraries Class loader Class files subsystem Java Stacks Method Area Heap Pc Registers Native Method Stacks runtime data areas native Execution native method interface method engine libraries
  • 4. Java Performance 4 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com PC register •PC Register Thread PC register (Program Counter) Start Create Java Method Call { … } Native Pointer or Current Instruction Address (native pointer or method bytecode Native Method Call undefined
  • 5. Java Performance 5 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks •Java Virtual Machine Stack
  • 6. Java Performance 5 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks •Java Virtual Machine Stack Java Stack Thread
  • 7. Java Performance 5 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks •Java Virtual Machine Stack Java Stack Thread Java Stack Thread
  • 8. Java Performance 5 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks •Java Virtual Machine Stack Java Stack Thread Java Stack Thread Java Stack Thread
  • 9. Java Performance 5 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks •Java Virtual Machine Stack Java Stack Stack Frame • Java Stack Thread • Stack Frame Push, Pop Java Stack Thread Java Stack Java Stack • Thread 1 Stack Area • Stack Thread Thread • Thread Java Stack • Implement JVM Vendor Thread Thread • Stack Frame
  • 10. Java Performance 6 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks • Stack Frame • Local Variable Section, Operand Local Variable Section Stack Compile Time Operand Stack • Frame Data Frame Data • Method call Class Data Stack Frame Stack Frame Java Stack
  • 11. Java Performance 7 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks • Stack Frame – Local Variable Section • Zero base Array 0 1 Local Variable Section • Index data access 2 3 -Method Parameters 4 -Local variable • Method Parameter 5 index • Local Variable Compiler
  • 12. Java Performance 8 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com • Java Virtual Machine Stacks • Stack Frame – Local Variable Section
  • 13. Java Performance 9 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks • Stack Frame – Local Variable Section 0 reference hidden this 1 int int a 2 int char b class JvmInternal { 3 long c public int testMethod (int a, char b, long long c, float d, Object e, double f, String g, byte h, short i, boolean j) { 5 float float d return 0; 6 reference Object e } 7 double f } double 9 reference String g 10 int byte h 11 int short i 12 int boolean j
  • 14. Java Performance 10 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks • Stack Frame – Operand Stack • Zero base Array Operand Stack • Instruction pop -JVM Work Space • Push • Data Type Local Variable
  • 15. Java Performance 11 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks public void operandStack(); class JvmInternal2 { Code: public void operandStack() { 0: iconst_5 int a, b, c; 1: istore_1 a = 5; 2: bipush 6 b = 6; 4: istore_2 c = a + b; 5: iload_1 } 6: iload_2 } 7: iadd 8: istore_3 9: return istore_1istore_2iload_1 iload_2 iadd istore_3 6 Operand Stack 5 5 11 int c 3 11 Local Variable int b 2 6 6 6 6 6 Section int a 1 5 5 5 5 5 5 hidden this ref 0 ref ref ref ref ref ref
  • 16. Java Performance 12 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks • Stack Frame – Frame Data Frame Data -Constant pool Resolution -Normal Method Return -Exception Dispatch
  • 17. Java Performance 12 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks • Stack Frame • Constant Pool Entry – Frame Data • Constant Pool Symbolic Reference Frame Data -Constant pool Resolution -Normal Method Return -Exception Dispatch
  • 18. Java Performance 12 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks • Stack Frame • Constant Pool Entry – Frame Data • Constant Pool Symbolic Reference Frame Data -Constant pool Resolution -Normal Method Return -Exception Dispatch • Method stack frame pc register instruction pointer • operand stack push
  • 19. Java Performance 12 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks • Stack Frame • Constant Pool Entry – Frame Data • Constant Pool Symbolic Reference Frame Data -Constant pool Resolution -Normal Method Return -Exception Dispatch • Method stack frame • Exception pc Frame Data Exception Table register instruction pointer • operand stack push
  • 20. Java Performance 13 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Virtual Machine Stacks • Stack Frame – Frame Data public void operandStack(); Code: 0: iconst_5 class JvmInternal2 { 1: istore_1 public void operandStack() { 2: bipush 6 int a, b, c; 4: istore_2 a = 5; 5: iload_1 b = 6; 6: iload_2 try { 7: iadd c = a + b; 8: istore_3 } 9: goto 16 catch (NullPointerException e) { 12: astore 4 c = 0; 14: iconst_0 } 15: istore_3 } 16: return } Exception table: from to target type 5 9 12 Class java/lang/ NullPointerException
  • 21. Java Performance 14 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Native Method Stack •Native Method Stack Java Stacks Native Method Stack
  • 22. Java Performance 14 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Native Method Stack •Native Method Stack Java Stacks Native Method Stack Stack Java Method 1 Frame
  • 23. Java Performance 14 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Native Method Stack •Native Method Stack Java Stacks Native Method Stack Stack Java Method 1 Frame Native Method 1 Stack Frame
  • 24. Java Performance 14 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Native Method Stack •Native Method Stack Java Stacks Native Method Stack Stack Java Method 1 Frame Native Method 1 Stack Frame
  • 25. Java Performance 14 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Native Method Stack •Native Method Stack Java Stacks Native Method Stack Stack Java Method 1 Frame Native Method 1 Stack Frame Native Function Call
  • 26. Java Performance 14 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Native Method Stack •Native Method Stack Java Stacks Native Method Stack Stack Java Method 1 Frame Native Method 1 Stack Frame Native Function Call Stack Frame
  • 27. Java Performance 14 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Native Method Stack •Native Method Stack Java Stacks Native Method Stack Stack Java Method 1 Frame Native Method 1 Stack Frame Native Function Call Stack Frame Stack Java Method 2 Frame
  • 28. Java Performance 15 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area •Method Area JVM • Class Loader Load Type Method Area • JVM • Thread Class Data • Class file type Class Data Method Area Class • GC Data • Method Area Vendor Class Data  Sun Permanent Area Generation Heap Share Thread Thread  IBM Heap Thread
  • 29. Java Performance 16 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area Type Information Constant Pool Class metadata in Field Information Method Area Method Information Class Variables Reference to ClassLoader class Reference to Class class
  • 30. Java Performance 17 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area • Type Information Type Information • Type (Package + Class ) • Type Superclass (Type interface java.lang.object class superclass ) • Type class interface • Type modifier (public, abstract, final) • interface ( )
  • 31. Java Performance 17 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area • Type Information Type Information • Type (Package + Class ) • Type Superclass (Type interface java.lang.object class superclass ) • Type class interface • Type modifier (public, abstract, final) • interface ( ) Type  Java Class, Interface Java Class File  Java Type Standard Binary Format
  • 32. Java Performance 18 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area • Constant Pool • Constant Pool Type Constant Ordered Set • Literal Constant, Type, Field, Method Symbolic Reference • Constant Pool Entry Array index • Type Type, Method, Field Symbolic Reference Dynamic Linking
  • 33. Java Performance 19 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area • Field Information Field  Member Variable, Class Variable Type Field Field Information • Field • Field Type • Field Modifier (public, private, protected, static, final, volatile, transient)
  • 34. Java Performance 20 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area • Method Information Type Method Method Method Information • Method • Method Return Type (or void) • Method Parameter Type ( ) • Method Modifier (public, private, protected, static, final, syncronized, native, abstract)
  • 35. Java Performance 20 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area • Method Information Type Method Method Method Information Native or abstract • Method • Method bytecode • Method Return Type (or void) • Method Stack Frame • Method Parameter Type ( ) Operand Stack Local • Method Modifier variable Section (public, private, protected, static, final, • Exception Table syncronized, native, abstract)
  • 36. Java Performance 21 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area • Class Variable Class Variable Class • Class = Static • instance Instance • Instance Class Instance S ha re • Class Instance Instance • Final Class Constant Pool Instance
  • 37. Java Performance 22 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area • Reference to class ‘ClassLoader’ Reference ClassLoader class • Type Type JVM ClassLoader • Type Classloader • User-Defined Classloader reference • Bootstrap Classloader null • JVM Dynamic Linking Class Classloader Load
  • 38. Java Performance 23 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area • Reference to class ‘Class’ java.lang.class Reference class • Type load java.lang.class instance • getClass, forClass, isInterface Method Reference
  • 39. Java Performance 24 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area • Method Table Method Area • Class Method direct Class reference • Method Method Table • Method • Type interface abstract class Method class • Class Method Field superclass Method Constant reference Pool • Class Loading
  • 40. Java Performance 25 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area • Method Table Class A Class A { void a1() {…} 1 direct reference of a2() int a2() {…} 0 direct reference of a1() } Class B extends A{ Class B void a1() {…} 2 direct reference of b1() char b1() {…} 1 direct reference of a2() } 0 direct reference of a1()
  • 41. Java Performance 26 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Method Area • Method Table Heap Class A { Class B extends A{ void a1() {…} void a1() {…} int a2() {…} char b1() {…} B instance1 } } Method Area A instance2 Class B … 2 direct reference of b1() 1 direct reference of a2() bi 0 direct reference of a1()
  • 42. Java Performance 27 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap •Java Heap JVM • Instance Array • Thread Java Heap • JVM Heap instruction (new, newarray, Object Instance anewarray, multianewarray) Data • java code Class Pointer byte code Array Garbage Collection • Share • Java Heap Vendor Thread Thread  JVM Vendor Heap Thread Garbage Collection, Garbage Collector
  • 43. Java Performance 28 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • Hotspot JVM Heap Layout – Generational Heap
  • 44. Java Performance 29 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • Hotspot JVM Heap Layout Allocation Young Generation Promotion Old Generation
  • 45. Java Performance 30 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Heap Layout – One-Heap : IBM JVM Default Heap Layout heapbase heaplimit heaptop Heap K Cluster P Cluster Wilderness Heap cache or LOA
  • 46. Java Performance 31 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Heap Layout – Kcluster : Pinned Class Object • Default 1280 class entries • 1 Class Entry 300byte(32it), 560byte(64bit) – Pcluster : Pinned Object – Kcluster Pcluster – Pcluster 2KB Pluster – Pcluster Heap  Fragmentation
  • 47. Java Performance 32 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Heap Layout – Cache : Cache Allocation – Object Thread • Thread Heap Heap Lock • Heap Lock Thread • – Object Cache Allocation – 512 Bytes Object –
  • 48. Java Performance 33 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Heap Layout – Large Object Area • Large Object • 64KB Object • Heap • -Xloratio LOA (0.5 ~ 0.95 ) • 1MB Object
  • 49. Java Performance 34 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Heap Layout – Heap Garbage Object Live Object
  • 50. Java Performance 35 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Heap Layout – Sub pool • Java 1.4 • 16 Core SMP Allocation • Free Chunk FreeList
  • 51. Java Performance 36 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Heap Layout – Sub Pool Pool 1 Small Size Freelist Middle Size Freelist 2 3 4 5 … Large Size Freelist n
  • 52. Java Performance 37 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Heap Layout – Java 5 Heap – Heap Generational Heap – -Xgcpolicy: gencon Allocation Space Survivor Space Tenured Space Nursery Tenured
  • 53. Java Performance 38 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • Hotspot JVM Object Layout • Object Mark Word, Class Address Mark Word Class Address Object Data Header • Array Size Header ! Class Address Mark Word Array Size • Header 1 Word Array Data 1Word = 4bytes(32bit) 8bytes(64bit)
  • 54. Java Performance 39 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • Hotspot JVM Object Layout – Mark Word : Garbage Collection, Synchronization Hash Code (0) Mark Word Thread ID (1) Age Biased Tag 23 bit 6 bit 1 bit 2 bit Hash Code (0) Age Biased Tag Biased bit Tag Thread ID (1) 0 01 Unlocked (000) Lock Record Address 0 00 Light-weight locked (010) Monitor Address 0 10 Heavy-weight locked 0 11 Marked for GC (011) Forwarding Address 1 01 Biased / Biasable
  • 55. Java Performance 40 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • Hotspot JVM Object Layout Class Address Method Area Object Class Reference Array Size Array Object Array Data
  • 56. Java Performance 41 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Object Layout – Object Array – header 1 Word Garbage Collection (2bits) bit (2bits) Pinned Size+Flags Object Size G P mptr Class pointer or array size Thread Index Count Array bit (1bit) locknflags S H T A Monitor Index Type(5bits) Monitor Shape bit Object Data Hash code state (2bits) (1bit) Hash code
  • 57. Java Performance 42 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Object Layout – Size+Flag • 28 Bits : Object Size • 2 Bits : Multipinned Bit, Garbage Collection - Compaction Swapped Bit • Pinned Bit : 1 Bit • Dosed Bit : 1 Bit Garbage Collection (2bits) Object Size G P Pinned bit (2bits)
  • 58. Java Performance 43 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Object Layout – mptr : Method Pointer – 1word 8byte – Object Method Table Pointer – Array Array mptr
  • 59. Java Performance 44 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Object Layout – locknflags : lock – 1 word – Fat Lock Monitor Index 23 bits – Thin Lock 15 Bits Thread Index, 8 bits count – 5 Bits Lock Thread Index Count Array bit (1bit) locknflags S H T A Monitor Index Type(5bits) Monitor Shape bit (1bit) Hash code state (2bits)
  • 60. Java Performance 45 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Object Layout (Java 5~) – header 1 Word Lock word VTable Object Data Lock word Array Size VTable Array Data
  • 61. Java Performance 46 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Object Layout (Java5 ~) – Vtable Pointer – Vtable Object Information Table Pointer Object Information • Debug Data VTable OI • Class name • Object Type (Array, Object) • Reference field • Object Size Array Element • Offset Information
  • 62. Java Performance 47 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • IBM JVM Object Layout (Java5 ~) – Lock Word – 1 bit : Object on  Fat Lock – Fat Lock : 20 bits Monitor Index – Reserved Mode : Thread ID (15 bits), Count(5 bits) – Reserved Mode Locked 1 – Garbage Collector Hash Code (10 bits) Recursion Count (5 bits) Thread ID (15 bits) Count Hash Code 0 1 (10 bits) Monitor index (20 bits) Contention Bit (1bit) Reservation Bit (1bit)
  • 63. Java Performance 48 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • Array in Heap – Array Object Heap – Array Array Class instance – Type Array Class data – Array Instance data – Array Array Array – Class Data Naming Convention • ‘[‘ Type Description String
  • 64. Java Performance 49 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • Array in Heap – Type Description String Descriptor Type Array Class Data B Byte byte[] [B C Char char[][] [[C D Double double[] [D F Float float[][] [[F I Int int[][][] [[[I J Long long[] [J S Short short[][] [[S Z Boolean boolean[][][] [[[Z L Object java.lang.String[] [Ljava/lang/String
  • 65. Java Performance 50 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Java Heap • Array in Heap Java Heap Class Data Pointer Length (=2) Class Data Pointer ar1[0][0] ( int ) ar1[0][1] ( int ) Length ( =2) ar1[0] (array reference) Class Data Pointer ar1[1] (array reference) Length (=2) ar1[1][0] ( int ) ar1[1][1] ( int ) Method Area ar1 Array Reference Class Class Data Data int [][] ar1 = new int [2][2] [[I [I
  • 66. Java Performance 51 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory • Java Variables – Class Variables – Member Variables – Parameter Variables – Local Variables D:EXEM>type VariableArrange.java class VariableArrange { static int ci = 3; // Class Variable static String cs = "Static"; // Class Variable int mi = 4; // Member Variable String ms = "Member"; // Member Variable void method(int pi, String ps) { // Parameter Variable int li = 5; // Local Variable String ls = "Local"; // Local Variable } }
  • 67. Java Performance 52 Java Performance Fundamental | twitter @novathinker Runtime Memory artdb@ex-em.com | performeister.tistory.com Java Stack Java Heap Method Area [Ljava/lang/String VariableArrange Instance method frame VariableArrange Local Variable mi = 4 ms = ref2 class Field Information 3 ls=ref4 String Instance : ref1 “Static” Class Variable 2 li=5 ci 3 String Instance : ref2 “Member” 1 ps method informations String Instance : ref3 VariableArrange(); 0 pi void method(int, String); static {}; String Instance : ref4 “Local” Constant Pool int Integer …
  • 68. Java Performance 53 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory JvmInternal.java JvmInternal.class Bytecode
  • 69. Java Performance 54 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source class JvmInternal { } bytecode Java Stack Java Heap Method Area JvmInternal frame Frame Data JvmInternal Instance Operand Stack JvmInternal class Field Information Local Variable Class Variable main method information addTwoArgs method information Constant Pool 0 args fcv 100
  • 70. Java Performance 55 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source static int cv = 0; bytecode 0: iconst_0 Java Stack Java Heap Method Area JvmInternal frame Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class Field Information Local Variable Class Variable main method Length = 2 information addTwoArgs method args[1] “20” information args[0] “10” Constant Pool 0 args fcv 100 ICONST - Push value between -1, ..., 5, other values cause an exception
  • 71. Java Performance 56 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source static int cv = 0; bytecode 1: putstatic Java Stack Java Heap Method Area JvmInternal frame Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class Field Information Local Variable Class Variable main method Length = 2 information addTwoArgs method args[1] “20” information args[0] “10” Constant Pool 0 args fcv 100 PUTSTATIC - Put static field in class #4; //Field cv:I
  • 72. Java Performance 57 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source JvmInternal(); bytecode 0: aload_0 Java Stack Java Heap Method Area JvmInternal frame Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class args Field Information Class Variable Local Variable main method Length = 2 information addTwoArgs method args[1] “20” information args[0] “10” Constant Pool 0 args fcv 100 ALOAD - Load reference from local variable
  • 73. Java Performance 58 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source public static void main(java.lang.String[]); bytecode 1: invokespecial Java Stack Java Heap Method Area JvmInternal frame main frame Frame Data Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack Operand Stack JvmInternal class args Field Information Local Variable Local Variable Class Variable 3 main method Length = 2 information 2 addTwoArgs method args[1] “20” information 1 args[0] “10” Constant Pool 0 args 0 args fcv 100 INVOKESTATIC - Invoke instance method; special handling for superclass, private and instance initialization method invocations #1; //Method java/lang/Object."<init>":()V
  • 74. Java Performance 59 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source a = Integer.parseInt(args[0]); bytecode 0: aload_0 Java Stack Java Heap Method Area main frame Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class args Field Information Local Variable Class Variable 3 main method Length = 2 information 2 addTwoArgs method args[1] “20” information 1 args[0] “10” Constant Pool 0 args fcv 100 ALOAD - Load reference from local variable
  • 75. Java Performance 60 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source a = Integer.parseInt(args[0]); bytecode 1: iconst_0 Java Stack Java Heap Method Area main frame Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class args[0] Field Information Local Variable Class Variable 3 main Method Length = 2 information 2 addTwoArgs method args[1] “20” information 1 args[0] “10” Constant Pool 0 args fcv 100 ICONST - Push value between -1, ..., 5, other values cause an exception
  • 76. Java Performance 61 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source a = Integer.parseInt(args[0]); bytecode 2: aaload Java Stack Java Heap Method Area main frame Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class “10” args[0] Field Information Local Variable Class Variable 3 main Method Length = 2 information 2 addTwoArgs method args[1] “20” information 1 args[0] “10” Constant Pool 0 args fcv 100 AALOAD - Load reference from array
  • 77. Java Performance 62 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source a = Integer.parseInt(args[0]); bytecode 3: invokestatic Java Stack Java Heap Method Area main frame java/lang/Integer Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class 10 Field Information Local Variable Class Variable 3 main Method Length = 2 information 2 addTwoArgs method args[1] “20” information 1 args[0] “10” Constant Pool 0 args fcv 100 INVOKESTATIC - Invoke a class (static) method #2; //Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
  • 78. Java Performance 63 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source a = Integer.parseInt(args[0]); bytecode 6: istore_1 Java Stack Java Heap Method Area main frame java/lang/Integer Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class 10 Field Information Local Variable Class Variable 3 main Method Length = 2 information 2 addTwoArgs method args[1] 20 information 1 a=10 args[0] 10 Constant Pool 0 args fcv 100 ISTORE - Store int from stack into local variable
  • 79. Java Performance 64 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source b = Integer.parseInt(args[1]); bytecode 7: aload_0 Java Stack Java Heap Method Area main frame java/lang/Integer Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class args Field Information Local Variable Class Variable 3 main method Length = 2 information 2 addTwoArgs method args[1] “20” information 1 a=10 args[0] “10” Constant Pool 0 args fcv 100 ALOAD - Load reference from local variable
  • 80. Java Performance 65 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source b = Integer.parseInt(args[1]); bytecode 8: iconst_1 Java Stack Java Heap Method Area main frame java/lang/Integer Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class args[1] Field Information Local Variable Class Variable 3 main Method Length = 2 information 2 addTwoArgs method args[1] “20” information 1 a=10 args[0] “10” Constant Pool 0 args fcv 100 ICONST - Push value between -1, ..., 5, other values cause an exception
  • 81. Java Performance 66 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source b = Integer.parseInt(args[1]); bytecode 9: aaload Java Stack Java Heap Method Area main frame java/lang/Integer Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class “20” args[1] Field Information Local Variable Class Variable 3 main Method Length = 2 information 2 addTwoArgs method args[1] “20” information 1 a=10 args[0] “10” Constant Pool 0 args fcv 100 AALOAD - Load reference from array
  • 82. Java Performance 67 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source b = Integer.parseInt(args[1]); bytecode 10: invokestatic Java Stack Java Heap Method Area main frame java/lang/Integer Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class 20 Field Information Local Variable Class Variable 3 main Method Length = 2 information 2 addTwoArgs method args[1] “20” information 1 a=10 args[0] “10” Constant Pool 0 args fcv 100 INVOKESTATIC - Invoke a class (static) method #2; //Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
  • 83. Java Performance 68 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source b = Integer.parseInt(args[1]); bytecode 13: istore_2 Java Stack Java Heap Method Area main frame java/lang/Integer Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class 20 Field Information Local Variable Class Variable 3 main Method Length = 2 information 2 b=20 addTwoArgs method args[1] 20 information 1 a=10 args[0] 10 Constant Pool 0 args fcv 100 ISTORE - Store int from stack into local variable
  • 84. Java Performance 69 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source c = addTwoArgs(a,b); bytecode 14: iload_1 Java Stack Java Heap Method Area main frame java/lang/Integer Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class 10 Field Information Local Variable Class Variable 3 main Method Length = 2 information 2 b=20 addTwoArgs method args[1] 20 information 1 a=10 args[0] 10 Constant Pool 0 args fcv 100 ILOAD - Load int from local variable onto stack
  • 85. Java Performance 70 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source c = addTwoArgs(a,b); bytecode 15: iload_2 Java Stack Java Heap Method Area main frame java/lang/Integer Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class 20 10 Field Information Local Variable Class Variable 3 main Method Length = 2 information 2 b=20 addTwoArgs method args[1] 20 information 1 a=10 args[0] 10 Constant Pool 0 args fcv 100 ILOAD - Load int from local variable onto stack
  • 86. Java Performance 71 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source c = addTwoArgs(a,b); bytecode 16: Java Stack Java Heap Method Area main frame addTwoArgs frame java/lang/Integer Frame Data Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack main ref JvmInternal class 20 10 Operand Stack Field Information Local Variable Class Variable 3 main Method Length = 2 information Local Variable 2 b=20 addTwoArgs method args[1] 20 information 1 a=10 1 args[0] 10 Constant Pool 0 args 0 fcv 100 INVOKESTATIC - Invoke instance method; special handling for superclass, private and instance initialization method invocations #3; //Method addTwoArgs:(II)I
  • 87. Java Performance 72 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source static int addTwoArgs(int, int); bytecode 16: Java Stack Java Heap Method Area main frame addTwoArgs frame java/lang/Integer Frame Data Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack main ref JvmInternal class 20 10 Operand Stack Field Information Local Variable Class Variable 3 main Method Length = 2 information Local Variable 2 b=20 addTwoArgs method args[1] 20 information 1 a=10 1 20 args[0] 10 Constant Pool 0 args 0 10 fcv 100 INVOKESTATIC - Invoke instance method; special handling for superclass, private and instance initialization method invocations #3; //Method addTwoArgs:(II)I
  • 88. Java Performance 73 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source cv = fcv ; bytecode 0: bipush Java Stack Java Heap Method Area main frame addTwoArgs frame java/lang/Integer Operand Stack Frame Data JvmInternal Instance [Ljava/lang/String main ref JvmInternal class ref Operand Stack Field Information Local Variable Class Variable 100 3 main Method Length = 2 information Local Variable 2 b=20 addTwoArgs method args[1] 20 information 1 a=10 1 20 args[0] 10 Constant Pool 0 args 0 10 fcv 100 BIPUSH - Push byte on stack, (-128~127)
  • 89. Java Performance 74 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source cv = fcv ; bytecode 2: putstatic Java Stack Java Heap Method Area main frame addTwoArgs frame java/lang/Integer Frame Data Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack main ref JvmInternal class ref Operand Stack Field Information Class Variable Local Variable cv 100 100 3 main Method Length = 2 information Local Variable 2 b=20 addTwoArgs method args[1] 20 information 1 a=10 1 20 args[0] 10 Constant Pool 0 args 0 10 fcv 100 PUTSTATIC - Put static field in class #4; //Field cv:I
  • 90. Java Performance 75 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source return ( x + y ); bytecode 5: iload_0 Java Stack Java Heap Method Area main frame addTwoArgs frame java/lang/Integer Frame Data Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack main ref JvmInternal class ref Operand Stack Field Information Local Variable Class Variable 10 3 main Method Length = 2 information Local Variable 2 b=20 addTwoArgs method args[1] 20 information 1 a=10 1 20 args[0] 10 Constant Pool 0 args 0 10 fcv 100 ILOAD - Load int from local variable onto stack
  • 91. Java Performance 76 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source return ( x + y ); bytecode 6: iload_1 Java Stack Java Heap Method Area main frame addTwoArgs frame java/lang/Integer Frame Data Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack main ref JvmInternal class ref Operand Stack Field Information 20 Local Variable Class Variable 10 3 main Method Length = 2 information Local Variable 2 b=20 addTwoArgs method args[1] 20 information 1 a=10 1 20 args[0] 10 Constant Pool 0 args 0 10 fcv 100 ILOAD - Load int from local variable onto stack
  • 92. Java Performance 77 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source return ( x + y ); bytecode 7: iadd Java Stack Java Heap Method Area main frame addTwoArgs frame java/lang/Integer Frame Data Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack main ref JvmInternal class ref Operand Stack Field Information Local Variable Class Variable 30 3 main Method Length = 2 information Local Variable 2 b=20 addTwoArgs method args[1] 20 information 1 a=10 1 20 args[0] 10 Constant Pool 0 args 0 10 fcv 100 IADD - Add ints
  • 93. Java Performance 78 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source return ( x + y ); bytecode 8: ireturn Java Stack Java Heap Method Area main frame addTwoArgs frame java/lang/Integer Frame Data Frame Data JvmInternal Instance [Ljava/lang/String JvmInternal() ref 30 main ref ref JvmInternal class Operand Stack Operand Stack Field Information pop Class Variable Local Variable cv 100 30 3 main Method Length = 2 information Local Variable 2 b=20 addTwoArgs method args[1] 20 information 1 a=10 1 20 args[0] 10 Constant Pool 0 args 0 10 fcv 100 IRETURN - Return int from method
  • 94. Java Performance 79 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com Runtime Memory Source c = addTwoArgs(a,b); bytecode 19: istore_3 Java Stack Java Heap Method Area main frame java/lang/Integer Frame Data JvmInternal Instance [Ljava/lang/String Operand Stack JvmInternal class 30 Field Information Class Variable Local Variable cv 100 3 c=30 main Method Length = 2 information 2 b=20 addTwoArgs method args[1] 20 information 1 a=10 args[0] 10 Constant Pool 0 args fcv 100 ISTORE - Store int from stack into local variable
  • 95. Java Performance 80 Java Performance Fundamental | twitter @novathinker artdb@ex-em.com | performeister.tistory.com