SlideShare a Scribd company logo
A D I G I TA L C O M M E R C E C O N S U LTA N C Y
Basics of JVM Tuning
... because out-of-the-box is often not enough


                    Vladislav Gangan
                    Vice President of Engineering
                    Tacit Knowledge, Moldova
AGENDA

 • Basics of JVM memory management
 • Optimal starting settings for tuning
 • Garbage collection algorithms
 • Debugging the garbage collection process
 • Putting theory in practice
RATIONALE BEHIND THE NEED OF JVM TUNING
TWO AREAS OF MEMORY - STACK
• scratch space for thread
execution

• easy to track internally
• any method call results in
block allocation
   • local vars
   • bookkeeping data
• always LIFO allocation
TWO AREAS OF MEMORY - STACK
• scratch space for thread
execution

• easy to track internally
                               m2 vars
• any method call results in
block allocation               m1 vars
   • local vars
   • bookkeeping data
• always LIFO allocation
TWO AREAS OF MEMORY - STACK
• scratch space for thread
execution

• easy to track internally
                                free
• any method call results in
block allocation               m1 vars
   • local vars
   • bookkeeping data
• always LIFO allocation
TWO AREAS OF MEMORY - STACK
• scratch space for thread
execution

• easy to track internally
                               m3 vars
• any method call results in
block allocation               m1 vars
   • local vars
   • bookkeeping data
• always LIFO allocation
TWO AREAS OF MEMORY - STACK
• scratch space for thread
execution

• easy to track internally     m4 vars
• any method call results in   m3 vars
block allocation
   • local vars                m1 vars
   • bookkeeping data
• always LIFO allocation
TWO AREAS OF MEMORY - HEAP

• dynamic & random memory
allocation

• much more complex to
handle

• can result in memory leaks if
objects not destroyed properly
   • shielded from the
   developer by the JVM
TWO AREAS OF MEMORY - HEAP

• dynamic & random memory
allocation                        o1

• much more complex to
handle

• can result in memory leaks if
objects not destroyed properly
   • shielded from the
   developer by the JVM
TWO AREAS OF MEMORY - HEAP

• dynamic & random memory
allocation                        o1

• much more complex to                 o2
handle

• can result in memory leaks if
objects not destroyed properly
   • shielded from the
   developer by the JVM
TWO AREAS OF MEMORY - HEAP

• dynamic & random memory
allocation                        o1

• much more complex to                 o2   o3
handle

• can result in memory leaks if
objects not destroyed properly
   • shielded from the
   developer by the JVM
HEAP STRUCTURE




   Eden   S0   S1   Tenured   Permanent
GENERATIONAL OBJECT FLOW
GENERATIONAL OBJECT FLOW
GENERATIONAL OBJECT FLOW
GENERATIONAL OBJECT FLOW
GENERATIONAL OBJECT FLOW




  Minor collection
GARBAGE COLLECTION ELIGIBILITY




Reachability test - can an object be reached from any live
               pointer in the application?
GARBAGE COLLECTION TYPES


  • Minor collection
    • operates on young space
    • low impact on performance
  • Major collection
    • operates on entire heap
    • very costly performance wise
    • some algorithms are “stop-the-world” activity
JVM TUNING PROCESS

  while (iAmNotSatisfied)
  {
    size = defineMinMaxHeapSize();
    ratios = fineTuneGenerationsRatios();
    alg = selectAppropriateGcAlgotrithm();
    loadTestTheApplication(size, ratios, alg);
    iAmNotSatisfied = analyzeStatistics();
  }
HEAP SIZE CONFIG OPTIONS



  -Xms - initial heap size
  -Xmx - max/final heap size

  java -Xms123m -Xmx456m MyApp
HEAP SIZE DEFAULTS

                       Non-server class
                      machine (or 32-bit
      Heap setting                        Server class machine
                     Windows) or prior to
                         to J2SE 5.0

                                              1/64 of
        -Xms               4 MB               physical
                                            (up to 1 GB)

                                          1/4 of physical
        -Xmx              64 MB
                                           (up to 1 GB)
HEAP SIZE DEFAULTS

                        Non-server class
                                                      fo r
       Heap setting          te
                       machine (or 32-bit
                           a s
                      Windows) or prior to
                                           Server class machine
                         u p
                        q p
                          to J2SE 5.0
                       e a of
                      d l 1/64
                     a e
                  i4n ev physical
        -Xms     s MB l (up to 1 GB)
                e e
              im ris
             t p
           n r
         te te 64 MB 1/4 of physical
       f-Xmx
      O en                (up to 1 GB)
FINDING MAX HEAP SIZE




  • observe application under consistent load
  • then add supplementary 25-30% to peak value
  • do not exceed 2 GB value (so say the experts)
FINDING INITIAL HEAP SIZE
FINDING INITIAL HEAP SIZE


  assign it equal to the max size, and here’s why:
FINDING INITIAL HEAP SIZE


  assign it equal to the max size, and here’s why:

  • the heap will grow in the long run anyway
FINDING INITIAL HEAP SIZE


  assign it equal to the max size, and here’s why:

  • the heap will grow in the long run anyway
  • baking in the overhead of heap growth/
  resizing is viewed as irresponsible by the
  experts
CAVEATS ON 32-BIT SYSTEMS


  • requires contiguous unfragmented chunk of memory
  • 32-bit systems may not be able to allocate the desired size
   • 2-3 GB per process (Windows)
   • 3 GB per process (Linux)
   • some amount of memory is eaten up by OS and
   background processes
WHAT ARE THE OPTIONS?
SIZING HEAP GENERATIONS



  -XX:NewSize=123m

  -XX:MaxNewSize=123m

  -XX:SurvivorRatio=6
APPLICATION CONSIDERATIONS FOR HEAP GENERATIONS SIZES




   • reserve plenty of memory for young
   generation if creating lots of short-lived
   objects

   • favor tenured generation if making use
   of lots of long-lived objects
OPTIMAL SIZE FOR YOUNG GENERATION




      [⅓; ½)
WHAT ABOUT THAT SURVIVORRATIO FLAG?
WHAT ABOUT THAT SURVIVORRATIO FLAG?




   Eden   S0   S1   Tenured   Permanent
WHAT ABOUT THAT SURVIVORRATIO FLAG?



  • defaults to 1/34 of young generation
      • high risk of short-lived objects to migrate to
     tenured generation very fast

  • best if kept between [1/6; 1/12] of new space
      • -XX:SurvivorRatio=6 => 1/8
GARBAGE COLLECTION ALGORITHMS




 • serial
 • parallel
 • concurrent
SERIAL COLLECTOR


  • suitable only for single processor machines
  • relatively efficient
  • default on non-server class machines
  • -XX:+UseSerialGC
SERIAL COLLECTOR




   Application      GC    Application
    Threads        Stop    Threads
PARALLEL COLLECTOR


  • takes advantage of multiple CPUs/cores
  • performs minor collections in parallel
      • significantly improves performance in systems
     with lots of minor collections

  • default on server class machines
  • -XX:+UseParallelGC
PARALLEL COLLECTOR


  • major collections are still single threaded
  • -XX:+UseParallelOldGc
      • as of J2SE 5.0 update 6
      • allows parallel compaction which reduces heap
     fragmentation
     • allows major collections in parallel
PARALLEL COLLECTOR




   Application    GC    Application
    Threads      Stop    Threads
CONCURRENT COLLECTOR


 • performs most of its work concurrently
    • the goal is to keep GC pauses short
 • single GC thread that runs
 simultaneously with application threads

 • -XX:+UseConcMarkSweepGC
CONCURRENT COLLECTOR




                          App                   App
     App     Initial   Threads +             Threads +
                                    Remark
   Threads   Mark      Concurrent            Concurrent
                         Mark                  Sweep
WHICH COLLECTOR WORKS WELL IN MY CASE?

     Collector                 Best for:

                   Single processor machines + small
       Serial                    heaps

                    Multiprocessor machines + high
      Parallel    throughput (batch processing apps)


                  Fast processor machines + minimized
     Concurrent         response times (web apps)
GATHERING HEAP BEHAVIOR STATISTICS


  • -verbose:gc
  • -XX:+PrintGCDetails
  • -XX:+PrintHeapAtGC
  • -Xloggc:/path/to/gc/log/file
EXAMPLE
                            java -verbose:gc MyApp




33.357: [GC 25394K->18238K(130176K), 0.0148471 secs]
33.811: [Full GC 22646K->18501K(130176K), 0.1954419 secs]
EXAMPLE
                java -verbose:gc -XX:+PrintGCDetails MyApp




19.834: [GC 19.834: [DefNew: 9088K->960K(9088K), 0.0126103 secs]
        16709K->9495K(130112K), 0.0126960 secs]
20.424: [Full GC 20.424:
        [Tenured: 8535K->10032K(121024K), 0.1342573 secs] 13847K->10032K(130112K),
        [Perm : 12287K->12287K(12288K)], 0.1343551 secs]
EXAMPLE
     java -verbose:gc -XX:+PrintGCDetails -XX:+PrintHeapAtGC MyApp


18.645: [GC {Heap before GC invocations=16:
Heap
    def new generation! total 9088K, used 9088K [0x02a20000, 0x033f0000, 0x05180000)
       eden space 8128K, 100% used [0x02a20000, 0x03210000, 0x03210000)
       from space 960K, 100% used [0x03210000, 0x03300000, 0x03300000)
       to! space 960K,! 0% used [0x03300000, 0x03300000, 0x033f0000)
    tenured generation!total 121024K, used 7646K [0x05180000, 0x0c7b0000, 0x22a20000)
       the space 121024K,! 6% used [0x05180000, 0x058f7870, 0x058f7a00, 0x0c7b0000)
compacting perm gen total 11264K, used 11202K [0x22a20000, 0x23520000, 0x26a20000)
       the space 11264K, 99% used [0x22a20000, 0x23510938, 0x23510a00, 0x23520000)
No shared spaces configured.
ANALYSIS TOOLS

  • custom scripts
      • feed the output to spreadsheet processor & build
      charts

  • GCViewer - http://www.tagtraum.com/gcviewer.html
  • Gchisto - http://java.net/projects/gchisto/
  • VisualVM - http://visualvm.java.net
  • a host of other tools (commercial & freeware)
Let’s practice
RATIONALE BEHIND THE NEED OF JVM TUNING
Q&A
BIBLIOGRAPHY
BIBLIOGRAPHY
BIBLIOGRAPHY
BIBLIOGRAPHY
THANK YOU

More Related Content

What's hot (20)

PDF
Fight with Metaspace OOM
Leon Chen
 
PPTX
Tuning Java GC to resolve performance issues
Sergey Podolsky
 
PDF
Choosing Right Garbage Collector to Increase Efficiency of Java Memory Usage
Jelastic Multi-Cloud PaaS
 
ODP
Java GC, Off-heap workshop
Valerii Moisieienko
 
PDF
GC Tuning in the HotSpot Java VM - a FISL 10 Presentation
Ludovic Poitou
 
PDF
JVM Garbage Collection Tuning
ihji
 
PPT
Jvm Performance Tunning
guest1f2740
 
PPTX
G1 collector and tuning and Cassandra
Chris Lohfink
 
PPTX
Building a Better JVM
Simon Ritter
 
PDF
Let's talk about Garbage Collection
Haim Yadid
 
PPTX
G1 Garbage Collector - Big Heaps and Low Pauses?
C2B2 Consulting
 
PDF
Performance Tuning - Understanding Garbage Collection
Haribabu Nandyal Padmanaban
 
PPTX
G1GC
koji lin
 
PPTX
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Monica Beckwith
 
PDF
On heap cache vs off-heap cache
rgrebski
 
PDF
Elastic JVM for Scalable Java EE Applications Running in Containers #Jakart...
Jelastic Multi-Cloud PaaS
 
PPTX
Storing Cassandra Metrics
Chris Lohfink
 
PPTX
Hadoop world g1_gc_forh_base_v4
YanpingWang
 
PDF
optimizing_ceph_flash
Vijayendra Shamanna
 
PDF
Java and Containers - Make it Awesome !
Dinakar Guniguntala
 
Fight with Metaspace OOM
Leon Chen
 
Tuning Java GC to resolve performance issues
Sergey Podolsky
 
Choosing Right Garbage Collector to Increase Efficiency of Java Memory Usage
Jelastic Multi-Cloud PaaS
 
Java GC, Off-heap workshop
Valerii Moisieienko
 
GC Tuning in the HotSpot Java VM - a FISL 10 Presentation
Ludovic Poitou
 
JVM Garbage Collection Tuning
ihji
 
Jvm Performance Tunning
guest1f2740
 
G1 collector and tuning and Cassandra
Chris Lohfink
 
Building a Better JVM
Simon Ritter
 
Let's talk about Garbage Collection
Haim Yadid
 
G1 Garbage Collector - Big Heaps and Low Pauses?
C2B2 Consulting
 
Performance Tuning - Understanding Garbage Collection
Haribabu Nandyal Padmanaban
 
G1GC
koji lin
 
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Monica Beckwith
 
On heap cache vs off-heap cache
rgrebski
 
Elastic JVM for Scalable Java EE Applications Running in Containers #Jakart...
Jelastic Multi-Cloud PaaS
 
Storing Cassandra Metrics
Chris Lohfink
 
Hadoop world g1_gc_forh_base_v4
YanpingWang
 
optimizing_ceph_flash
Vijayendra Shamanna
 
Java and Containers - Make it Awesome !
Dinakar Guniguntala
 

Viewers also liked (17)

PPT
Jvm Performance Tunning
Terry Cho
 
KEY
Everything I Ever Learned About JVM Performance Tuning @Twitter
Attila Szegedi
 
ODP
Jvm tuning in a rush! - Lviv JUG
Tomek Borek
 
PDF
What's Inside a JVM?
Azul Systems Inc.
 
PPTX
QSpiders - Memory (JVM architecture)
Qspiders - Software Testing Training Institute
 
PDF
Understanding JVM
Aparna Chaudhary
 
PDF
JVM JIT compilation overview by Vladimir Ivanov
ZeroTurnaround
 
PPTX
Architecture diagram of jvm
home
 
PPT
JVM- Java Virtual Machine
Manasvi Mehta
 
PPTX
Tune up Yarn and Hive
rxu
 
PPT
Java-java virtual machine
Surbhi Panhalkar
 
PDF
Hive tuning
Michael Zhang
 
PDF
JVM Tuning and Profiling
Bhuvan Rawal
 
PPTX
55 New Features in JDK 9
Simon Ritter
 
ODP
G1 Garbage Collector: Details and Tuning
Simone Bordet
 
Jvm Performance Tunning
Terry Cho
 
Everything I Ever Learned About JVM Performance Tuning @Twitter
Attila Szegedi
 
Jvm tuning in a rush! - Lviv JUG
Tomek Borek
 
What's Inside a JVM?
Azul Systems Inc.
 
QSpiders - Memory (JVM architecture)
Qspiders - Software Testing Training Institute
 
Understanding JVM
Aparna Chaudhary
 
JVM JIT compilation overview by Vladimir Ivanov
ZeroTurnaround
 
Architecture diagram of jvm
home
 
JVM- Java Virtual Machine
Manasvi Mehta
 
Tune up Yarn and Hive
rxu
 
Java-java virtual machine
Surbhi Panhalkar
 
Hive tuning
Michael Zhang
 
JVM Tuning and Profiling
Bhuvan Rawal
 
55 New Features in JDK 9
Simon Ritter
 
G1 Garbage Collector: Details and Tuning
Simone Bordet
 
Ad

Similar to Basics of JVM Tuning (20)

PPTX
Java performance tuning
Mohammed Fazuluddin
 
PPTX
Considerations when deploying Java on Kubernetes
superserch
 
PDF
[Outdated] Secrets of Performance Tuning Java on Kubernetes
Bruno Borges
 
PDF
Secrets of Performance Tuning Java on Kubernetes
Bruno Borges
 
PDF
Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably a...
Flink Forward
 
PPTX
Вячеслав Блинов «Java Garbage Collection: A Performance Impact»
Anna Shymchenko
 
PDF
Accelerating HBase with NVMe and Bucket Cache
Nicolas Poggi
 
PPTX
High performace network of Cloud Native Taiwan User Group
HungWei Chiu
 
PDF
A Dataflow Processing Chip for Training Deep Neural Networks
inside-BigData.com
 
PPTX
JVM @ Taobao - QCon Hangzhou 2011
Kris Mok
 
PDF
SF Big Analytics & SF Machine Learning Meetup: Machine Learning at the Limit ...
Chester Chen
 
PDF
Real-Time Analytics with Kafka, Cassandra and Storm
John Georgiadis
 
PDF
Kafka to the Maxka - (Kafka Performance Tuning)
DataWorks Summit
 
PPTX
#GeodeSummit - Off-Heap Storage Current and Future Design
PivotalOpenSourceHub
 
PDF
Memory, Big Data, NoSQL and Virtualization
Bigstep
 
PDF
JVM Performance Tuning
Jeremy Leisy
 
PPTX
HBase: Extreme makeover
bigbase
 
PPTX
Memory Management: What You Need to Know When Moving to Java 8
AppDynamics
 
PDF
SHARE Virtual Flash Memory VFM VSM_04-17-19.pdf
ssuser9f7ea5
 
PDF
CASSANDRA MEETUP - Choosing the right cloud instances for success
Erick Ramirez
 
Java performance tuning
Mohammed Fazuluddin
 
Considerations when deploying Java on Kubernetes
superserch
 
[Outdated] Secrets of Performance Tuning Java on Kubernetes
Bruno Borges
 
Secrets of Performance Tuning Java on Kubernetes
Bruno Borges
 
Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably a...
Flink Forward
 
Вячеслав Блинов «Java Garbage Collection: A Performance Impact»
Anna Shymchenko
 
Accelerating HBase with NVMe and Bucket Cache
Nicolas Poggi
 
High performace network of Cloud Native Taiwan User Group
HungWei Chiu
 
A Dataflow Processing Chip for Training Deep Neural Networks
inside-BigData.com
 
JVM @ Taobao - QCon Hangzhou 2011
Kris Mok
 
SF Big Analytics & SF Machine Learning Meetup: Machine Learning at the Limit ...
Chester Chen
 
Real-Time Analytics with Kafka, Cassandra and Storm
John Georgiadis
 
Kafka to the Maxka - (Kafka Performance Tuning)
DataWorks Summit
 
#GeodeSummit - Off-Heap Storage Current and Future Design
PivotalOpenSourceHub
 
Memory, Big Data, NoSQL and Virtualization
Bigstep
 
JVM Performance Tuning
Jeremy Leisy
 
HBase: Extreme makeover
bigbase
 
Memory Management: What You Need to Know When Moving to Java 8
AppDynamics
 
SHARE Virtual Flash Memory VFM VSM_04-17-19.pdf
ssuser9f7ea5
 
CASSANDRA MEETUP - Choosing the right cloud instances for success
Erick Ramirez
 
Ad

Recently uploaded (20)

PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
PDF
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
PPTX
Digital Circuits, important subject in CS
contactparinay1
 
PDF
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
PPTX
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PDF
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PPTX
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
PDF
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PDF
Automating Feature Enrichment and Station Creation in Natural Gas Utility Net...
Safe Software
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
Digital Circuits, important subject in CS
contactparinay1
 
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
Automating Feature Enrichment and Station Creation in Natural Gas Utility Net...
Safe Software
 

Basics of JVM Tuning

  • 1. A D I G I TA L C O M M E R C E C O N S U LTA N C Y
  • 2. Basics of JVM Tuning ... because out-of-the-box is often not enough Vladislav Gangan Vice President of Engineering Tacit Knowledge, Moldova
  • 3. AGENDA • Basics of JVM memory management • Optimal starting settings for tuning • Garbage collection algorithms • Debugging the garbage collection process • Putting theory in practice
  • 4. RATIONALE BEHIND THE NEED OF JVM TUNING
  • 5. TWO AREAS OF MEMORY - STACK • scratch space for thread execution • easy to track internally • any method call results in block allocation • local vars • bookkeeping data • always LIFO allocation
  • 6. TWO AREAS OF MEMORY - STACK • scratch space for thread execution • easy to track internally m2 vars • any method call results in block allocation m1 vars • local vars • bookkeeping data • always LIFO allocation
  • 7. TWO AREAS OF MEMORY - STACK • scratch space for thread execution • easy to track internally free • any method call results in block allocation m1 vars • local vars • bookkeeping data • always LIFO allocation
  • 8. TWO AREAS OF MEMORY - STACK • scratch space for thread execution • easy to track internally m3 vars • any method call results in block allocation m1 vars • local vars • bookkeeping data • always LIFO allocation
  • 9. TWO AREAS OF MEMORY - STACK • scratch space for thread execution • easy to track internally m4 vars • any method call results in m3 vars block allocation • local vars m1 vars • bookkeeping data • always LIFO allocation
  • 10. TWO AREAS OF MEMORY - HEAP • dynamic & random memory allocation • much more complex to handle • can result in memory leaks if objects not destroyed properly • shielded from the developer by the JVM
  • 11. TWO AREAS OF MEMORY - HEAP • dynamic & random memory allocation o1 • much more complex to handle • can result in memory leaks if objects not destroyed properly • shielded from the developer by the JVM
  • 12. TWO AREAS OF MEMORY - HEAP • dynamic & random memory allocation o1 • much more complex to o2 handle • can result in memory leaks if objects not destroyed properly • shielded from the developer by the JVM
  • 13. TWO AREAS OF MEMORY - HEAP • dynamic & random memory allocation o1 • much more complex to o2 o3 handle • can result in memory leaks if objects not destroyed properly • shielded from the developer by the JVM
  • 14. HEAP STRUCTURE Eden S0 S1 Tenured Permanent
  • 19. GENERATIONAL OBJECT FLOW Minor collection
  • 20. GARBAGE COLLECTION ELIGIBILITY Reachability test - can an object be reached from any live pointer in the application?
  • 21. GARBAGE COLLECTION TYPES • Minor collection • operates on young space • low impact on performance • Major collection • operates on entire heap • very costly performance wise • some algorithms are “stop-the-world” activity
  • 22. JVM TUNING PROCESS while (iAmNotSatisfied) { size = defineMinMaxHeapSize(); ratios = fineTuneGenerationsRatios(); alg = selectAppropriateGcAlgotrithm(); loadTestTheApplication(size, ratios, alg); iAmNotSatisfied = analyzeStatistics(); }
  • 23. HEAP SIZE CONFIG OPTIONS -Xms - initial heap size -Xmx - max/final heap size java -Xms123m -Xmx456m MyApp
  • 24. HEAP SIZE DEFAULTS Non-server class machine (or 32-bit Heap setting Server class machine Windows) or prior to to J2SE 5.0 1/64 of -Xms 4 MB physical (up to 1 GB) 1/4 of physical -Xmx 64 MB (up to 1 GB)
  • 25. HEAP SIZE DEFAULTS Non-server class fo r Heap setting te machine (or 32-bit a s Windows) or prior to Server class machine u p q p to J2SE 5.0 e a of d l 1/64 a e i4n ev physical -Xms s MB l (up to 1 GB) e e im ris t p n r te te 64 MB 1/4 of physical f-Xmx O en (up to 1 GB)
  • 26. FINDING MAX HEAP SIZE • observe application under consistent load • then add supplementary 25-30% to peak value • do not exceed 2 GB value (so say the experts)
  • 28. FINDING INITIAL HEAP SIZE assign it equal to the max size, and here’s why:
  • 29. FINDING INITIAL HEAP SIZE assign it equal to the max size, and here’s why: • the heap will grow in the long run anyway
  • 30. FINDING INITIAL HEAP SIZE assign it equal to the max size, and here’s why: • the heap will grow in the long run anyway • baking in the overhead of heap growth/ resizing is viewed as irresponsible by the experts
  • 31. CAVEATS ON 32-BIT SYSTEMS • requires contiguous unfragmented chunk of memory • 32-bit systems may not be able to allocate the desired size • 2-3 GB per process (Windows) • 3 GB per process (Linux) • some amount of memory is eaten up by OS and background processes
  • 32. WHAT ARE THE OPTIONS?
  • 33. SIZING HEAP GENERATIONS -XX:NewSize=123m -XX:MaxNewSize=123m -XX:SurvivorRatio=6
  • 34. APPLICATION CONSIDERATIONS FOR HEAP GENERATIONS SIZES • reserve plenty of memory for young generation if creating lots of short-lived objects • favor tenured generation if making use of lots of long-lived objects
  • 35. OPTIMAL SIZE FOR YOUNG GENERATION [⅓; ½)
  • 36. WHAT ABOUT THAT SURVIVORRATIO FLAG?
  • 37. WHAT ABOUT THAT SURVIVORRATIO FLAG? Eden S0 S1 Tenured Permanent
  • 38. WHAT ABOUT THAT SURVIVORRATIO FLAG? • defaults to 1/34 of young generation • high risk of short-lived objects to migrate to tenured generation very fast • best if kept between [1/6; 1/12] of new space • -XX:SurvivorRatio=6 => 1/8
  • 39. GARBAGE COLLECTION ALGORITHMS • serial • parallel • concurrent
  • 40. SERIAL COLLECTOR • suitable only for single processor machines • relatively efficient • default on non-server class machines • -XX:+UseSerialGC
  • 41. SERIAL COLLECTOR Application GC Application Threads Stop Threads
  • 42. PARALLEL COLLECTOR • takes advantage of multiple CPUs/cores • performs minor collections in parallel • significantly improves performance in systems with lots of minor collections • default on server class machines • -XX:+UseParallelGC
  • 43. PARALLEL COLLECTOR • major collections are still single threaded • -XX:+UseParallelOldGc • as of J2SE 5.0 update 6 • allows parallel compaction which reduces heap fragmentation • allows major collections in parallel
  • 44. PARALLEL COLLECTOR Application GC Application Threads Stop Threads
  • 45. CONCURRENT COLLECTOR • performs most of its work concurrently • the goal is to keep GC pauses short • single GC thread that runs simultaneously with application threads • -XX:+UseConcMarkSweepGC
  • 46. CONCURRENT COLLECTOR App App App Initial Threads + Threads + Remark Threads Mark Concurrent Concurrent Mark Sweep
  • 47. WHICH COLLECTOR WORKS WELL IN MY CASE? Collector Best for: Single processor machines + small Serial heaps Multiprocessor machines + high Parallel throughput (batch processing apps) Fast processor machines + minimized Concurrent response times (web apps)
  • 48. GATHERING HEAP BEHAVIOR STATISTICS • -verbose:gc • -XX:+PrintGCDetails • -XX:+PrintHeapAtGC • -Xloggc:/path/to/gc/log/file
  • 49. EXAMPLE java -verbose:gc MyApp 33.357: [GC 25394K->18238K(130176K), 0.0148471 secs] 33.811: [Full GC 22646K->18501K(130176K), 0.1954419 secs]
  • 50. EXAMPLE java -verbose:gc -XX:+PrintGCDetails MyApp 19.834: [GC 19.834: [DefNew: 9088K->960K(9088K), 0.0126103 secs] 16709K->9495K(130112K), 0.0126960 secs] 20.424: [Full GC 20.424: [Tenured: 8535K->10032K(121024K), 0.1342573 secs] 13847K->10032K(130112K), [Perm : 12287K->12287K(12288K)], 0.1343551 secs]
  • 51. EXAMPLE java -verbose:gc -XX:+PrintGCDetails -XX:+PrintHeapAtGC MyApp 18.645: [GC {Heap before GC invocations=16: Heap def new generation! total 9088K, used 9088K [0x02a20000, 0x033f0000, 0x05180000) eden space 8128K, 100% used [0x02a20000, 0x03210000, 0x03210000) from space 960K, 100% used [0x03210000, 0x03300000, 0x03300000) to! space 960K,! 0% used [0x03300000, 0x03300000, 0x033f0000) tenured generation!total 121024K, used 7646K [0x05180000, 0x0c7b0000, 0x22a20000) the space 121024K,! 6% used [0x05180000, 0x058f7870, 0x058f7a00, 0x0c7b0000) compacting perm gen total 11264K, used 11202K [0x22a20000, 0x23520000, 0x26a20000) the space 11264K, 99% used [0x22a20000, 0x23510938, 0x23510a00, 0x23520000) No shared spaces configured.
  • 52. ANALYSIS TOOLS • custom scripts • feed the output to spreadsheet processor & build charts • GCViewer - http://www.tagtraum.com/gcviewer.html • Gchisto - http://java.net/projects/gchisto/ • VisualVM - http://visualvm.java.net • a host of other tools (commercial & freeware)
  • 54. RATIONALE BEHIND THE NEED OF JVM TUNING
  • 55. Q&A