jvm

Introduce some concepts about JVM.

Runtime data area

  1. Method area
    class descriptor
    class loaded once only, Class.forName("xxx")
    shared by threads
  2. Heap
    objects and arrays
    shared by threads
  3. Java stack
    each thread needs a stack
    each process has one thread at least
  4. Native method stack
    native methods
  5. Program counter register

JVM memory

  1. Heap
    • Young
      Eden space
      Survivor-0 space
      Survivor-1 space
    • Old
      Old generation space
  2. Non-heap
    Meta space
    Code cache
    Compressed class space

Monitors

  1. jvisualvm

    • Open

      1
      $> jvisualvm // open jvisualvm
    • Plugin
      Tools –> Plugins –> visual gc –> install

  2. jconsole
    mem: heap and non-heap
  3. jmap
    1
    2
    3
    $> jmap -heap pid // show heap info
    $> jmap -permstat pid // show permnent space info
    $> jmap -clstats pid // show class loader info

Modify heap

Debug --> Debug Configurations --> Arguments --> VM arguments  
`-Xms` --> set heap initial size (1/64 mem size)[`-Xms300m`]  
`-Xmx` --> set heap max size (1/4 mem size)[`-Xmx300m`]  
`-Xmn` --> set young space size (eden + s0 + s1)[`-Xmn150m`]  
`-XX:NewSize` --> set young space size [`-XX:NewSize=150m`]  
`-XX:MaxNewSize` --> set young space max size [`-XX:MaxNewSize=150m`]  
`-XX:PermSize` --> set permnent space size [`-XX:PermSize=150m`]  
`-XX:MaxPermSize` --> set permnent space max size [`-XX:MxPermSize=150m`]  
---------
young space : old space = 1 : 2  
eden : survivor = 3 : 1  

ClassLoader

classloader