SlideShare a Scribd company logo
Memory ManagementMemory Management
in Androidin Android
AnDevCon Boston 2015
CC-BY-SA 3.0 - Attribution requirements and misc., PLEASE READ:
This slide must remain as-is in this specific location (slide #1), everything else you are free to
change; including the logo :-)
Use of figures in other documents must feature the below "Originals at" URL immediately
under that figure and the below copyright notice where appropriate.
You are FORBIDDEN from using the default "About" slide as-is or any of its contents.
Copyright (C) 2014-2015, Opersys inc.
These slides created by: Karim Yaghmour
Originals at: http://www.opersys.com/training/
AboutAbout
Introduced Linux Trace Toolkit in 1999
Originated Adeos and relayfs (kernel/relay.c)
Ara Android Arch Oversight
Training, Custom Dev, Consulting, ...
"Note that memory usage on modern operating systems like Linux is an extremely
complicated and difficult to understand area. In fact the chances of you actually
correctly interpreting whatever numbers you get is extremely low. (Pretty much
every time I look at memory usage numbers with other engineers, there is always
a long discussion about what they actually mean that only results in a vague
conclusion.)"
-- Dianne Hackborn, Feb 19, 2010, Stackoverflow
AgendaAgenda
Architecture Recap1.
Kernel's overall role2.
Kernel driver interfaces3.
Kernel user-space interfaces4.
Low-memory conditions5.
Bionic6.
App Dev Considerations7.
Tools8.
Misc.9.
References10.
Demo HardwareDemo Hardware
Nexus 9 (Flounder/Volantis)
NVIDIA Tegra K1
Denver 2-core, 2.3GHz
2 GB on-board DDR3 (PCDDR 533MHz)
16 GB eMMC
Architecture RecapArchitecture Recap
AOSP
System startup
Memory layout
1. AOSP1. AOSP
2. System startup2. System startup
3. Memory layout3. Memory layout
Kernel's overall roleKernel's overall role
Manage physical memory
Manage virtual-to-physical mappings
Process isolation:
Protect the hardware from user-space
Protect processes from each other
Driver capabilities:
Memory-mapped registers
DMA
MTD maps
Filesystem cache
File mapping
Swapping
InternalsInternals
Architecture-independent:
Architecture-specific:
Per-task struct (include/linux/sched.h):
The memory structures (include/linux/mm_types.h):
mm/
arch/arm/mm/
struct task_struct {
...
struct mm_struct *mm, *active_mm;
...
struct mm_struct {
struct vm_area_struct * mmap; /* list of VMAs */
struct rb_root mm_rb;
struct vm_area_struct * mmap_cache; /* last find_vma result */
Kernel driver interfacesKernel driver interfaces
Memory-mapped registers
DMA
MTD maps
ION
Kernel user-space interfacesKernel user-space interfaces
brk
mmap/munmap
Low-memory conditionsLow-memory conditions
OOM killer
oom_adj
Android low-mem driver
oom_adj set during init
Modifications to oom_adj at runtime by framework
BionicBionic
malloc()/free()
Comes from Doug Lea's dlmalloc
Public Domain
See bionic/libc/upstream-dlmalloc/
Tutorial/doc:
Dates back to 1987
Uses CALL_MORECORE() macro do allocations
Based on sbrk()
dlopen()/dlsym()
http://g.oswego.edu/dl/html/malloc.html
https://en.wikipedia.org/wiki/C_dynamic_memory_allocation
Flags to debug/observe malloc/free Linux
Enable native monitoring by DDMS:
Open ~/.android/ddms.cfg
Add line stating: "native=true"
$ adb shell setprop libc.debug.malloc 1
$ adb shell stop
$ adb shell start
App Dev ConsiderationsApp Dev Considerations
Recommendations given by Google
Measuring app mem usage
Getting system mem usage
android.os.Debug
android:largeHeap="true"
https://developer.android.com/training/articles
/memory.html
https://developer.android.com/reference/android
/app/ActivityManager.html#getProcessMemoryInfo%28int[]%29
public MemoryInfo[] getProcessMemoryInfo (int[] pids)
https://developer.android.com/reference/android
/app/ActivityManager.html#getMemoryInfo%28android.app.ActivityManager.MemoryInfo%29
public void getMemoryInfo (ActivityManager.MemoryInfo outInfo)
ToolsTools
Kernel
Native
Dalvik/ART
Framework
8.1 Kernel8.1 Kernel
Overall memory use
Physical-mapped reg address ranges
FS cache
"fragmentation"
/proc interface
RSS, VSS, USS, PSS, etc.
/proc/[pid]/maps, semantics of
8.2 Native8.2 Native
dumpstate
librank
procrank
procmem
showmap
tombstones
debuggerd
core files
8.3 Dalvik/ART8.3 Dalvik/ART
Heap size measurement
API in apps to get access to heap size from Runtime
MAT/Eclipse
dalvik.vm.heapsize
https://developer.android.com
/reference/java/lang/Runtime.html#maxMemory%28%29
public long maxMemory ()
8.4. Framework8.4. Framework
dumpsys meminfo
dumpsys procinfo
Misc.Misc.
DDOS on memory
KitKat efforts for low-mem
Security aspects
HAL use of mmap
Swap space?
zMAP
ION
CMA
ReferencesReferences
developer.android.com
source.android.com
strong/weak/soft/phantom references wrt Java GC: -
-
-->
http://source.android.com/devices/native-memory.html
http://source.android.com/devices/low-ram.html
https://developer.android.com/tools/debugging/debugging-memory.html
https://developer.android.com/training/articles/memory.html
http://android-developers.blogspot.com/2011/03/memory-analysis-
for-android.html
http://android-developers.blogspot.com/2009/02/track-memory-
allocations.html
https://stackoverflow.com/questions/2298208/how-to-discover-memory-
usage-of-my-application-in-android
http://elinux.org/Android_Memory_Usage
https://www.youtube.com/watch?v=_CruQY55HOk
http://blog.yojimbocorp.com/2012/10/03/view-android-application-memory-
usage-with-eclipse-ddms-plugin/
https://lwn.net/Articles/480055/
https://lwn.net/Articles/565469/
https://weblogs.java.net/blog/2006
/05/04/understanding-weak-references http://docs.oracle.com/javase/7/docs
/api/java/lang/ref/package-summary.html
Thank You!Thank You!
karim.yaghmour@opersys.com

More Related Content

PDF
Embedded Android Workshop with Marshmallow
PDF
Embedded Android Workshop with Lollipop
PDF
Embedded Android Workshop
PDF
Embedded Android Workshop with Lollipop
PDF
Embedded Android Workshop with Nougat
PDF
Embedded Android Workshop with Marshmallow
PDF
Project Ara
PDF
Brillo/Weave Internals
Embedded Android Workshop with Marshmallow
Embedded Android Workshop with Lollipop
Embedded Android Workshop
Embedded Android Workshop with Lollipop
Embedded Android Workshop with Nougat
Embedded Android Workshop with Marshmallow
Project Ara
Brillo/Weave Internals

What's hot (20)

PDF
Embedded Android Workshop with Marshmallow
PDF
Developing Android Platform Tools
PDF
Android Things: Android for IoT
PDF
Android Platform Debugging and Development
PDF
Brillo / Weave Internals
PDF
Embedded Android Workshop with Nougat
PDF
Embedded Android Workshop with Oreo
PDF
Android Things Internals
PDF
Embedded Android Workshop with Nougat
PDF
Android Platform Debugging and Development
PDF
Extending Android's Platform Toolsuite
PDF
Android Internals
PDF
Android Platform Debugging and Development
PDF
Android Platform Debugging and Development
PDF
Android Platform Debugging and Development
PDF
Android's HIDL: Treble in the HAL
PDF
Android Platform Debugging and Development
PDF
Embedded Android Workshop with Pie
PDF
Embedded Android Workshop at ELC Europe
PDF
Is Android the New Embedded Linux? at AnDevCon VI
Embedded Android Workshop with Marshmallow
Developing Android Platform Tools
Android Things: Android for IoT
Android Platform Debugging and Development
Brillo / Weave Internals
Embedded Android Workshop with Nougat
Embedded Android Workshop with Oreo
Android Things Internals
Embedded Android Workshop with Nougat
Android Platform Debugging and Development
Extending Android's Platform Toolsuite
Android Internals
Android Platform Debugging and Development
Android Platform Debugging and Development
Android Platform Debugging and Development
Android's HIDL: Treble in the HAL
Android Platform Debugging and Development
Embedded Android Workshop with Pie
Embedded Android Workshop at ELC Europe
Is Android the New Embedded Linux? at AnDevCon VI
Ad

Viewers also liked (20)

PDF
Embedded Android Workshop at Embedded World 2014
PDF
Embedded Android Workshop at ABS 2014
PDF
Embedded Android Workshop
PDF
Android Microconf at Linux Plumber 2012
PDF
Android On Development Boards at AnDevCon3
PDF
Is Android the New King of Embedded OSes at Embedded World 2014
PDF
Embedded Android Workshop at AnDevCon VI
PDF
Leveraging Android's Linux Heritage at AnDevCon VI
PDF
Embedded Android Workshop
PDF
Embedded Android Workshop at Embedded World Conference 2013
PDF
Memory Management in Android
PDF
Android Platform Debugging and Development
PDF
Embedded Android Workshop with Marshmallow
PDF
Android Platform Debugging and Development at ABS 2014
PDF
Memory Management in Android
PDF
Running Code in the Android Stack at ABS 2014
PDF
Project Ara
PDF
Inside Android's UI at AnDevCon VI
PDF
Porting Android
PDF
Customizing Android's UI
Embedded Android Workshop at Embedded World 2014
Embedded Android Workshop at ABS 2014
Embedded Android Workshop
Android Microconf at Linux Plumber 2012
Android On Development Boards at AnDevCon3
Is Android the New King of Embedded OSes at Embedded World 2014
Embedded Android Workshop at AnDevCon VI
Leveraging Android's Linux Heritage at AnDevCon VI
Embedded Android Workshop
Embedded Android Workshop at Embedded World Conference 2013
Memory Management in Android
Android Platform Debugging and Development
Embedded Android Workshop with Marshmallow
Android Platform Debugging and Development at ABS 2014
Memory Management in Android
Running Code in the Android Stack at ABS 2014
Project Ara
Inside Android's UI at AnDevCon VI
Porting Android
Customizing Android's UI
Ad

Similar to Memory Management in Android (20)

PDF
Memory Management in Android
PDF
Memory Management in Android
PDF
Memory Management in Android
PDF
Memory Management in Android
PPTX
Android Memory Management
PPTX
Memory management in Andoid
PDF
Android Memory , Where is all My RAM
PPTX
Linux Memory Management with CMA (Contiguous Memory Allocator)
PDF
Virtual memory 20070222-en
PDF
Linux Memory Management
PDF
Memory management in Linux kernel
PDF
Tuning Android for low RAM
PPTX
Linux Kernel MMC Storage driver Overview
PDF
Bringing up Android on your favorite X86 Workstation or VM (AnDevCon Boston, ...
PDF
Kernel Recipes 2017 - 20 years of Linux Virtual Memory - Andrea Arcangeli
DOC
Lesson 8 Memory Storage And Management
PPTX
Fast-paced Introduction to Android Internals
PDF
2014 valat-phd-defense-slides
ODT
ACADGILD:: ANDROID LESSON-How to analyze & manage memory on android like ...
PPTX
Android mp3 player
Memory Management in Android
Memory Management in Android
Memory Management in Android
Memory Management in Android
Android Memory Management
Memory management in Andoid
Android Memory , Where is all My RAM
Linux Memory Management with CMA (Contiguous Memory Allocator)
Virtual memory 20070222-en
Linux Memory Management
Memory management in Linux kernel
Tuning Android for low RAM
Linux Kernel MMC Storage driver Overview
Bringing up Android on your favorite X86 Workstation or VM (AnDevCon Boston, ...
Kernel Recipes 2017 - 20 years of Linux Virtual Memory - Andrea Arcangeli
Lesson 8 Memory Storage And Management
Fast-paced Introduction to Android Internals
2014 valat-phd-defense-slides
ACADGILD:: ANDROID LESSON-How to analyze & manage memory on android like ...
Android mp3 player

More from Opersys inc. (11)

PDF
Android Automotive
PDF
Android 10 Internals Update
PDF
Android Security Internals
PDF
Android Treble: Blessing or Trouble?
PDF
Scheduling in Android
PDF
Android Things Internals
PDF
Scheduling in Android
PDF
Brillo / Weave Internals
PDF
Android Platform Debugging and Development
PDF
Android Platform Debugging and Development
PDF
Project Ara
Android Automotive
Android 10 Internals Update
Android Security Internals
Android Treble: Blessing or Trouble?
Scheduling in Android
Android Things Internals
Scheduling in Android
Brillo / Weave Internals
Android Platform Debugging and Development
Android Platform Debugging and Development
Project Ara

Recently uploaded (20)

PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Nekopoi APK 2025 free lastest update
PPTX
ManageIQ - Sprint 268 Review - Slide Deck
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
AI in Product Development-omnex systems
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PPT
Introduction Database Management System for Course Database
PPTX
L1 - Introduction to python Backend.pptx
PPTX
Odoo POS Development Services by CandidRoot Solutions
PPTX
Introduction to Artificial Intelligence
PDF
System and Network Administraation Chapter 3
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PPTX
ISO 45001 Occupational Health and Safety Management System
PDF
System and Network Administration Chapter 2
PDF
top salesforce developer skills in 2025.pdf
PDF
Understanding Forklifts - TECH EHS Solution
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Nekopoi APK 2025 free lastest update
ManageIQ - Sprint 268 Review - Slide Deck
Design an Analysis of Algorithms I-SECS-1021-03
AI in Product Development-omnex systems
How to Choose the Right IT Partner for Your Business in Malaysia
Introduction Database Management System for Course Database
L1 - Introduction to python Backend.pptx
Odoo POS Development Services by CandidRoot Solutions
Introduction to Artificial Intelligence
System and Network Administraation Chapter 3
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
ISO 45001 Occupational Health and Safety Management System
System and Network Administration Chapter 2
top salesforce developer skills in 2025.pdf
Understanding Forklifts - TECH EHS Solution
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
VVF-Customer-Presentation2025-Ver1.9.pptx

Memory Management in Android

  • 1. Memory ManagementMemory Management in Androidin Android AnDevCon Boston 2015
  • 2. CC-BY-SA 3.0 - Attribution requirements and misc., PLEASE READ: This slide must remain as-is in this specific location (slide #1), everything else you are free to change; including the logo :-) Use of figures in other documents must feature the below "Originals at" URL immediately under that figure and the below copyright notice where appropriate. You are FORBIDDEN from using the default "About" slide as-is or any of its contents. Copyright (C) 2014-2015, Opersys inc. These slides created by: Karim Yaghmour Originals at: http://www.opersys.com/training/
  • 4. Introduced Linux Trace Toolkit in 1999 Originated Adeos and relayfs (kernel/relay.c) Ara Android Arch Oversight Training, Custom Dev, Consulting, ...
  • 5. "Note that memory usage on modern operating systems like Linux is an extremely complicated and difficult to understand area. In fact the chances of you actually correctly interpreting whatever numbers you get is extremely low. (Pretty much every time I look at memory usage numbers with other engineers, there is always a long discussion about what they actually mean that only results in a vague conclusion.)" -- Dianne Hackborn, Feb 19, 2010, Stackoverflow
  • 6. AgendaAgenda Architecture Recap1. Kernel's overall role2. Kernel driver interfaces3. Kernel user-space interfaces4. Low-memory conditions5. Bionic6. App Dev Considerations7. Tools8. Misc.9. References10.
  • 7. Demo HardwareDemo Hardware Nexus 9 (Flounder/Volantis) NVIDIA Tegra K1 Denver 2-core, 2.3GHz 2 GB on-board DDR3 (PCDDR 533MHz) 16 GB eMMC
  • 10. 2. System startup2. System startup
  • 11. 3. Memory layout3. Memory layout
  • 12. Kernel's overall roleKernel's overall role Manage physical memory Manage virtual-to-physical mappings Process isolation: Protect the hardware from user-space Protect processes from each other Driver capabilities: Memory-mapped registers DMA MTD maps Filesystem cache File mapping Swapping
  • 13. InternalsInternals Architecture-independent: Architecture-specific: Per-task struct (include/linux/sched.h): The memory structures (include/linux/mm_types.h): mm/ arch/arm/mm/ struct task_struct { ... struct mm_struct *mm, *active_mm; ... struct mm_struct { struct vm_area_struct * mmap; /* list of VMAs */ struct rb_root mm_rb; struct vm_area_struct * mmap_cache; /* last find_vma result */
  • 14. Kernel driver interfacesKernel driver interfaces Memory-mapped registers DMA MTD maps ION
  • 15. Kernel user-space interfacesKernel user-space interfaces brk mmap/munmap
  • 16. Low-memory conditionsLow-memory conditions OOM killer oom_adj Android low-mem driver oom_adj set during init Modifications to oom_adj at runtime by framework
  • 17. BionicBionic malloc()/free() Comes from Doug Lea's dlmalloc Public Domain See bionic/libc/upstream-dlmalloc/ Tutorial/doc: Dates back to 1987 Uses CALL_MORECORE() macro do allocations Based on sbrk() dlopen()/dlsym() http://g.oswego.edu/dl/html/malloc.html https://en.wikipedia.org/wiki/C_dynamic_memory_allocation
  • 18. Flags to debug/observe malloc/free Linux Enable native monitoring by DDMS: Open ~/.android/ddms.cfg Add line stating: "native=true" $ adb shell setprop libc.debug.malloc 1 $ adb shell stop $ adb shell start
  • 19. App Dev ConsiderationsApp Dev Considerations Recommendations given by Google Measuring app mem usage Getting system mem usage android.os.Debug android:largeHeap="true" https://developer.android.com/training/articles /memory.html https://developer.android.com/reference/android /app/ActivityManager.html#getProcessMemoryInfo%28int[]%29 public MemoryInfo[] getProcessMemoryInfo (int[] pids) https://developer.android.com/reference/android /app/ActivityManager.html#getMemoryInfo%28android.app.ActivityManager.MemoryInfo%29 public void getMemoryInfo (ActivityManager.MemoryInfo outInfo)
  • 21. 8.1 Kernel8.1 Kernel Overall memory use Physical-mapped reg address ranges FS cache "fragmentation" /proc interface RSS, VSS, USS, PSS, etc. /proc/[pid]/maps, semantics of
  • 23. 8.3 Dalvik/ART8.3 Dalvik/ART Heap size measurement API in apps to get access to heap size from Runtime MAT/Eclipse dalvik.vm.heapsize https://developer.android.com /reference/java/lang/Runtime.html#maxMemory%28%29 public long maxMemory ()
  • 24. 8.4. Framework8.4. Framework dumpsys meminfo dumpsys procinfo
  • 25. Misc.Misc. DDOS on memory KitKat efforts for low-mem Security aspects HAL use of mmap Swap space? zMAP ION CMA
  • 26. ReferencesReferences developer.android.com source.android.com strong/weak/soft/phantom references wrt Java GC: - - --> http://source.android.com/devices/native-memory.html http://source.android.com/devices/low-ram.html https://developer.android.com/tools/debugging/debugging-memory.html https://developer.android.com/training/articles/memory.html http://android-developers.blogspot.com/2011/03/memory-analysis- for-android.html http://android-developers.blogspot.com/2009/02/track-memory- allocations.html https://stackoverflow.com/questions/2298208/how-to-discover-memory- usage-of-my-application-in-android http://elinux.org/Android_Memory_Usage https://www.youtube.com/watch?v=_CruQY55HOk http://blog.yojimbocorp.com/2012/10/03/view-android-application-memory- usage-with-eclipse-ddms-plugin/ https://lwn.net/Articles/480055/ https://lwn.net/Articles/565469/ https://weblogs.java.net/blog/2006 /05/04/understanding-weak-references http://docs.oracle.com/javase/7/docs /api/java/lang/ref/package-summary.html