3. 512MB? That's so 2012!
Why do that to yourself?
You have no choice ;)
Mod-maintainer for older device
Android on embedded devices
Virtualized Android, anyone?
9. Dalvik is chatty
Dalvik's logcat output can paint a pretty good picture.
12-3015:35:43.135:D/dalvikvm(15368):GC_EXPLICITfreed39K,66%free2349K/6788K,p
aused24ms+8ms,total129ms
12-3015:35:43.682:D/dalvikvm(15368):GC_CONCURRENTfreed282K,5%free10382K/10823
K,paused5ms+4ms
12-3015:35:44.043:D/dalvikvm(15368):GC_CONCURRENTfreed319K,5%free10507K/10951
K,paused3ms+3ms
12-3015:35:44.723:D/dalvikvm(15368):GC_CONCURRENTfreed364K,5%free10568K/11079
K,paused3ms+4ms
12-3015:35:44.803:D/dalvikvm(15368):GC_FOR_ALLOCfreed312K,6%free10549K/11207K
,paused31ms
12-3015:35:45.034:D/dalvikvm(15368):GC_FOR_ALLOCfreed316K,6%free10542K/11207K
,paused48ms
12-3015:35:45.074:D/dalvikvm(15368):GC_FOR_ALLOCfreed1K,6%free10631K/11207K,
paused43ms
10. Dalvik Properties
Generally set these in PRODUCT_PROPERTY_OVERRIDES.
PRODUCT_PROPERTY_OVERRIDES:=
dalvik.vm.heapstartsize=5m
dalvik.vm.heapgrowthlimit=64m
dalvik.vm.heapsize=128m
dalvik.vm.heaptargetutilization=0.80
dalvik.vm.heapminfree=512k
dalvik.vm.heapmaxfree=2m
11. Dalvik VM - JIT
Google says...
For the really low-memory devices, we recommend
the JIT be disabled entirely.
Can save up to 1.5MB per process!
15. lowmemorykiller
A kernel module to preempt the oom and provide an interface
for user-space to prioritize apps
cat/sys/module/lowmemorykiller/parameters/adj
0,1,2,4,9,15
cat/sys/module/lowmemorykiller/parameters/minfree
3031,4218,5406,7454,8642,10158
23. Enabling KSM
This is easy-peasy
echo1|tee/sys/kernel/mm/ksm/run
echo1000|tee/sys/kernel/mm/ksm/sleep_millisecs
echo128|tee/sys/kernel/mm/ksm/pages_to_scan
24. Oh yeah...
You need to mark pages as mergeable.
void*mmap(void*addr,size_tsize,intprot,intflags,intfd,off_toffset){
...
if(result!=MAP_FAILED&&(flags&(MAP_PRIVATE|MAP_ANONYMOUS))!=0){
ErrnoRestorererrno_restorer;
madvise(result,size,MADV_MERGEABLE);
}
returnresult;
}
25. Is it working?
dumpsys meminfo answers this
TotalPSS:126741kB
KSM:6672kBsavedfromshared1128kB
24552kBunshared;102936kBvolatile
27. References
Dalvik VM Internals - 2008 Google I/O
A JIT Compiler for Android's Dalvik VM - 2010 Google I/O
Running Android with low RAM
Managing Your App's Memory
Investigating your RAM Usage
Understanding the Linux Virtual Memory Manager - Zones
Reducing Memory Access Lateny