• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Eclipse Memory Analyzer Tool

Eclipse Memory Analyzer Tool



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.



Total Views
Views on SlideShare
Embed Views



12 Embeds 1,753

http://www.littleeye.co 1483
http://leltest.com 78
http://leltest.adityapk.com 51
http://hasgeek.tv 50
http://funnel.hasgeek.com 40
https://hasgeek.tv 25
https://twitter.com 6
http://test.littleeyelabs.com 6
https://funnel.hasgeek.com 6
http://localhost 5
http://palantir.littleeyelabs.com 2
http://ec2-174-129-84-150.compute-1.amazonaws.com 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Eclipse Memory Analyzer Tool Eclipse Memory Analyzer Tool Presentation Transcript

    • Eclipse Memory Analyzer Tool Lakshman Kakkirala little eye labs
    • Agenda● Memory Analysis● Some Definitions● An example leak code● Demo of MAT and some basic functionality
    • Prereqs● Android app development● Basic Heap and Garbage CollectionDisqualification● Advanced knowledge of MAT :-)
    • littleEye appInsightCT Scanner for your app http://www.littleeye.co
    • Why Memory Analysis?● Identify Leaks● Reduce memory footprint
    • 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
    • Some definitions● Shallow Size● Retained Size● Dominator● Dominator Tree● GCRoots
    • Example - Object Graph E B 100 100 100 300 A F 100 100 C 100 600 100 200 D 100 100
    • Example (contd) - Dominator Tree E B F A C D
    • 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(); } ... }}
    • Investigation Tools - LogCat● D/dalvikvm( 9050 ): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/5261K, paused 2ms+2ms
    • 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)
    • MAT aka Eclipse Memory AnalyzerTool● Standalone - Download http://www.eclipse.org/mat● 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
    • DemoCovering● View Dominator Tree● Inspector ○ look at the field values ○ browse through entries in a Collection● Class Histograms● Group by Value
    • Demo (contd...)● Immediate Dominators● Path from GC roots● Retained Set● Object Query Language
    • References● Google IO 2011 - "Memory Management for Android apps" http://www.google. com/events/io/2011/sessions/memory-management-for- android-apps.html● Java Memory Analysis http://vimeo.com/21356498● Markus Kohlers Java Performance Blog http://kohlerm.blogspot.com● Memory Analyzer Blog http://memoryanalyzer.blogspot.in/
    • Backup SlidesApplication Attributes:<application android:largeHeap="true">
    • Garbage CollectionPre Gingerbread:GC: stop the world gc, >100msGingerbread and beyond:concurrent gc,two pauses - at the beginning and at the end < 5mspartial collections
    • 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
    • Typical Garbage CollectionsGC_CONCURRENTGC_FOR_MALLOCGC_EXTERNAL_ALLOC (pre-honeycomb)GC_HPROF_DUMP_HEAPGC_EXPLICIT - app calling System.gc()