Your SlideShare is downloading. ×
Eclipse Memory Analyzer Tool
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.


Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Eclipse Memory Analyzer Tool


Published on

This presentation is a basic introduction to MAT. Talks about the basic concepts in Heap Analysis.

This presentation is a basic introduction to MAT. Talks about the basic concepts in Heap Analysis.

  • Be the first to comment

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. Eclipse Memory Analyzer Tool Lakshman Kakkirala little eye labs
  • 2. Agenda● Memory Analysis● Some Definitions● An example leak code● Demo of MAT and some basic functionality
  • 3. Prereqs● Android app development● Basic Heap and Garbage CollectionDisqualification● Advanced knowledge of MAT :-)
  • 4. littleEye appInsightCT Scanner for your app
  • 5. Why Memory Analysis?● Identify Leaks● Reduce memory footprint
  • 6. Typical problems● Holding Context object (an Activity, a View or a Drawable) which actually happens to be an Activity● Non-static inner classes● Caches● Aggressive Caching
  • 7. Some definitions● Shallow Size● Retained Size● Dominator● Dominator Tree● GCRoots
  • 8. Example - Object Graph E B 100 100 100 300 A F 100 100 C 100 600 100 200 D 100 100
  • 9. Example (contd) - Dominator Tree E B F A C D
  • 10. Example - Memory Leakpublic class MainActivity extends Activity { private static LeakClass leak; // *NOT A STATIC* class LeakClass { } @Override public void onCreate(Bundle savedInstanceState) { .... if (leak == null) { leak = new LeakClass(); } ... }}
  • 11. Investigation Tools - LogCat● D/dalvikvm( 9050 ): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/5261K, paused 2ms+2ms
  • 12. Heapdump● What - Snapshot of all the objects in the process ○ Fields, References, Primitive Values ○ Classes, Class Loaders● How to generate ○ DDMS view - "Dump HPROF file" icon ○ android.os.Debug.dumpHprofData(<filename>) ○ signal 10● Convert to standard HPROF format ○ hprof-convert (only required if using standalone)
  • 13. MAT aka Eclipse Memory AnalyzerTool● Standalone - Download● Pros ○ Visible Primitive Data ○ Powerful selection model ○ No setup● Cons ○ Large dump files ○ Cannot answer code/temporal questions ■ Who/Where/When - an object is created ■ When - an object is garbage collected
  • 14. DemoCovering● View Dominator Tree● Inspector ○ look at the field values ○ browse through entries in a Collection● Class Histograms● Group by Value
  • 15. Demo (contd...)● Immediate Dominators● Path from GC roots● Retained Set● Object Query Language
  • 16. References● Google IO 2011 - "Memory Management for Android apps" com/events/io/2011/sessions/memory-management-for- android-apps.html● Java Memory Analysis● Markus Kohlers Java Performance Blog● Memory Analyzer Blog
  • 17. Backup SlidesApplication Attributes:<application android:largeHeap="true">
  • 18. Garbage CollectionPre Gingerbread:GC: stop the world gc, >100msGingerbread and beyond:concurrent gc,two pauses - at the beginning and at the end < 5mspartial collections
  • 19. Bitmappre-honeycomb:● pixel data was stored in native mem● recycle() or finalize()● invisible to MAThoneycomb and after:● pixel data inside dalvik heap● visible to MAT● works with partial and concurrent GC
  • 20. Typical Garbage CollectionsGC_CONCURRENTGC_FOR_MALLOCGC_EXTERNAL_ALLOC (pre-honeycomb)GC_HPROF_DUMP_HEAPGC_EXPLICIT - app calling System.gc()