Over a million developers have joined DZone.

Java Performance Tuning - A top down approach

DZone's Guide to

Java Performance Tuning - A top down approach

· Performance Zone ·
Free Resource

SignalFx is the only real-time cloud monitoring platform for infrastructure, microservices, and applications. The platform collects metrics and traces across every component in your cloud environment, replacing traditional point tools with a single integrated solution that works across the stack.


  • Memory
  • CPU
  • I/O
    • Devices
    • Network
Indicators - Windows undefined

Indicators - Linux

  • Sar, top, dstat, etc.

Jumping Board - JConsole

  • Study the JVM Args
  • Heap Usage should follow a saw tooth pattern denoting there is no leak
  • There should not be any anonymous threads like ‘Thread 1’
  • Look for creation of dynamic classes in large numbers
  • CPU Usage

Heap ?

  • Heap is utilized throughout the Object Life-cycle starting from new object creation, variable references, dereferences by variables going out of scope and finally till Garbage Collection
  • Object references can be represented in a tree fashion as we do deep references and the cumulative size retained at each level can be determined using offline utilities
  • There can multiple top level objects in the current program flow context that can retain individual object tree
  • parent node should be shallow in size such that it does not retain memory compared to its child nodes
  • When there is a large difference in retained size between parent and child node, i.e drops, there is a possibility of memory leak

Deep Dive – Heap Analysis

  • VisualVM, JRockit, IBM Health Center
  • Profilers 
  • IBM Heap Analyzer
  • Eclipse MAT

Deep Dive – Memory Leaks



  • Thread dumps provides  thread status, monitors, number of threads waiting for the monitor and call stack of methods
  • Comparing thread dumps taken at frequent intervals can reveal as to which tasks (call stack) are being performed across thread dumps
  • Online profiling tools can provide hotspot methods
  • Snapshots can provide thread wise call tree, along with response time

Deep Dive – Threads & Call Stack

  • VisualVM, JRockit, IBM Health Center
  • Profilers 
  • IBM Thread and Monitor Dump Analyzer

Deep Dive – Threads & Call Stack




  • Study the read, writes and response time of the Java process and identify the device that is heavily utilized or not responding
  • Study the network traffic in terms of number of connections, bytes sent / received and transfer rate

Deep Dive - I/O

  • Based on the heavy reads / writes look for input and output streams without buffering, multiple reads of same resources, unnecessary serialization, etc
  • Re-use of connection, file transfer in uncompressed form, releasing network resources (such as result set, statement and connection), etc

Performance Case Study - Heap


Performance Case Study - CPU


Best Practices

  • Understand your application environment such as firewall, layers (web, app & db), third party data providers if any
  • Use offline tools and less intrusive tools in production environments
  • Look for tools provided by the JVM vendor or the Application Server vendor
  • Use JMeter for recreating production scenario in your environment

SignalFx is built on a massively scalable streaming architecture that applies advanced predictive analytics for real-time problem detection. With its NoSample™ distributed tracing capabilities, SignalFx reliably monitors all transactions across microservices, accurately identifying all anomalies. And through data-science-powered directed troubleshooting SignalFx guides the operator to find the root cause of issues in seconds.

java ,performance

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}