blob: d68f601e7effa43ef78cb83b9fd4ee1d66e52a18 [file] [log] [blame]
page.title=Allocation Tracker Walkthrough
meta.tags="android, performance, profiling, tools, memoryleaks, memoryheap"
page.tags="android", "performance", "profiling", "tools", "memoryleaks", "memoryheap"
page.metaDescription=Record you app's memory allocations with their call stack to identify code that allocates and frees objects unnecessarily.
page.image=tools/performance/thumbnails/tools_allocation_tracker.png
page.article=true
@jd:body
<style>
.no-bullet {
list-style-type: none;
}
.padded {
padding-left: 10px;
}
</style>
<div id="tb" style="margin-left: 7px; margin-bottom: 5px;">
<h2>In this document</h2>
<ul>
<li><a href="#WhatYouNeed">Prerequisites</a></li>
<li><a href="#WorkingWithAllocationTracker">Working with Allocation Tracker</a></li>
</ul>
<h2>You should also read</h2>
<ul>
<li><a href="{@docRoot}tools/performance/heap-viewer/index.html">
Heap Viewer Walkthrough</a></li>
<li><a href="{@docRoot}tools/performance/memory-monitor/index.html">
Memory Monitor Walkthrough</a></li>
<li><a href="{@docRoot}tools/performance/comparison.html">
Comparison: Memory Monitor, Heap Viewer, Allocation Tracker</a>
<li><a href="{@docRoot}tools/performance/traceview/index.html">
Traceview Walkthrough</a></li>
</ul>
</div>
<p>This walkthrough shows the basic usage and workflow for the Allocation Tracker tool in Android
Studio. Allocation Tracker records an app's memory allocations and lists all
allocated objects for the profiling cycle with their call stack, size, and allocating code.</p>
<p>What it's good for:</p>
<ul>
<li>Identifying where many similar object types, from roughly the same call stack, are
allocated and deallocated over a very short period of time.</li>
<li>Finding the places in your code that may contribute to inefficient memory use.</li>
</ul>
<p>Before using Allocation Tracker, profile your code with the
<a href="{@docRoot}tools/performance/memory-monitor/index.html">Memory
Monitor Tool</a>. If you see many garbage collection events in a short amount of time, use
<a href="{@docRoot}tools/performance/heap-viewer/index.html">Heap
Viewer</a> to identify candidate object types, and Allocation Tracker to determine where this is
happening in your code.</p>
<h2 id="WhatYouNeed">Prerequisites</h2>
<ul>
<li>A mobile device with <a href=
"http://developer.android.com/tools/device.html#developer-device-options">Developer Options</a>
enabled.</li>
<li>Application code. Use your own code, or the <a href=
"https://github.com/udacity/Sunshine-Version-2">Sunshine</a> sample app from the <a href=
"https://www.udacity.com/course/ud853">Android Fundamentals Udacity course</a>.</li>
</ul>
<h2 id="WorkingWithAllocationTracker">Working with Allocation Tracker</h2>
<p>Allocation Tracker records each memory allocation that your app performs during the profiling
cycle. You tell Allocation Tracker to start recording and it logs allocations
until you tell it to stop.</p>
<hr>
<ul class="no-bullet">
<!-- this also hides bullet, by default outside box -->
<li><div style="overflow:hidden">
<ol class="padded">
<div class="figure" style="">
<img src="{@docRoot}images/tools/performance/allocation-tracker/gettingstarted_image01.png"
alt=""
width="400px" />
<p class="img-caption">
<strong>Figure 1. </strong>Steps for starting Allocation Tracker in Android DDMS.
</p>
</div>
<li>Connect your mobile device to your computer.</li>
<li>Open your application in Android Studio, build the source, and run it on your device or
emulator.</li>
<li>Click the <b>Android</b> button at the bottom of your Android Studio window.</li>
<li>If you are using the Android Device Monitor, click the RECORD button
<img src="{@docRoot}images/tools/performance/allocation-tracker/gettingstarted_image02.png">
(Start Allocation Tracking tooltip) in the Android DDMS tool bar. If you are using Android
Studio, click the
<img src="{@docRoot}images/tools/performance/allocation-tracker/gettingstarted_image02.png">
icon in the <a href="{@docRoot}tools/studio/index.html#mem-cpu">Memory Monitor</a> tool
bar. </li>
<li>Interact with your application.</li>
<li>Click the (same) STOP button (Stop Allocation Tracking tooltip).</li>
</ol>
</div></li>
<li><div style="overflow:hidden">
<hr>
<ol class="padded" start="7">
<div class="figure" style="">
<img src="{@docRoot}images/tools/performance/allocation-tracker/gettingstarted_image03.png"
alt=""
width="440px" />
<p class="img-caption">
<strong>Figure 2. </strong>Example of Allocation Tracker output in Android DDMS.
</p>
</div>
<li>After a few seconds, a pane with your recorded data opens.
<p>Note that allocations are logged on
the device, and the data file is transferred to the host computer, parsed for information, and
displayed.</p></li>
<li>The pane populates with a table.
<ul>
<li>Each row represents a memory allocation event.</li>
<li>Each column represents information about the allocation, such as the object type,
the thread, and its size. </li>
<li>The columns are movable, resizable, and sortable.</li>
</ul>
<p>Use the Filter to show only allocations from your app.</li>
<li>Click on an object to see its full stack trace.</li>
</ol>
</div></li>
</ul>