Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android
Transcript of Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android
![Page 1: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/1.jpg)
MEMORY ANALYZER TOOL AND MEMORY OPTIMIZATION TIPS IN ANDROID
Olexandr Tereshchuk
![Page 2: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/2.jpg)
Memory efficiency
![Page 3: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/3.jpg)
Problem
Low RAM size – 256MB to 512MB on most of devices.
Low CPU performance – harder to perform full GC.
Each application works in it’s own process and VM instance.
Large system library.
![Page 4: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/4.jpg)
Zygote
![Page 5: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/5.jpg)
Zygote – closer look
![Page 6: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/6.jpg)
DEX
![Page 7: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/7.jpg)
DEX – closer look
![Page 8: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/8.jpg)
Garbage Collection: Mark and Sweep
![Page 9: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/9.jpg)
Garbage Collection: Concurrent Mark and Sweep
initial mark — stop-the-world.
mark — Concurrent.
preclean — Concurrent.
remark — Stop-the-world.
sweep — Concurrent.
![Page 10: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/10.jpg)
Garbage Collection: Concurrent Mark and Sweep
![Page 11: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/11.jpg)
Eclipse Memory Analyzer Tool
![Page 12: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/12.jpg)
Shallow size
Shallow size of an object is the amount of memory allocated to store the object itself, not taking into account the referenced objects == Sum of the size of the “object header” and the fields of an object
![Page 13: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/13.jpg)
Retained size
Retained set of X
The set of objects that would be reclaimed, if we could delete Object X
Retained size of X
The Retained size of an object X is equal to the shallow size of the „Retained sets“ of X
![Page 14: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/14.jpg)
Demo
![Page 15: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/15.jpg)
Dominator Tree
X dominates Y, if all paths from a GC Root to Y go via X. “X is a Dominator of Y”
The closest Dominator to Y is called “immediate Dominator”
![Page 16: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/16.jpg)
Immediate Dominator
![Page 17: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/17.jpg)
Immediate Dominator
![Page 18: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/18.jpg)
Immediate Dominator
![Page 19: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/19.jpg)
Immediate Dominator
![Page 20: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/20.jpg)
Immediate Dominator
![Page 21: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/21.jpg)
Demo
![Page 22: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/22.jpg)
Common pitfalls
![Page 23: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/23.jpg)
“Static” Drawable
private static Drawable sBackground;
@Override
protected void onCreate(final Bundle state) {
super.onCreate(state);
final TextView label = new TextView(this);
label.setText("Leaks are bad");
if (sBackground == null) {
sBackground = getDrawable(R.drawable.large_bitmap);
}
label.setBackground(sBackground);
setContentView(label);
}
![Page 24: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/24.jpg)
Non-static Handler class
public class MyActivity extends Activity {
Handler myhandler = new Handler() { ... };
}
![Page 25: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/25.jpg)
WebView (only for 2.x)
![Page 26: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/26.jpg)
View.setTag(key,tag) - pre 4.0
public static class MainActivity extends Activity {
private final WeakHashMap<Parent, Parent.Child> mMap = new WeakHashMap<Parent, Parent.Child>();
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// If parents were collected OOM error wouldn't be thrown. But they aren't collected so we get OOM here.
for (int i = 0; i < 1000; ++i) {
final Parent parent = new Parent();
mMap.put( parent, parent.mChild );
}
}
}
public static class Parent {
public final Child mChild = new Child();
public class Child { private final byte[] mJunk = new byte[10*1024*1024]; }
}
![Page 27: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android](https://reader034.fdocuments.us/reader034/viewer/2022052505/5555be76d8b42a52568b5331/html5/thumbnails/27.jpg)
Questions ?