Александр Терещук - memory analyzer tool and memory optimization tips in android

28
MEMORY ANALYZER TOOL AND MEMORY OPTIMIZATION TIPS IN ANDROID Olexandr Tereshchuk

Upload: ua-mobile

Post on 15-May-2015

450 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

MEMORY ANALYZER TOOL AND MEMORY OPTIMIZATION TIPS IN ANDROID

Olexandr Tereshchuk

Page 2: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

Memory efficiency

Page 3: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

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

Zygote

Page 5: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

Zygote – closer look

Page 6: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

DEX

Page 7: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

DEX – closer look

Page 8: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

Garbage Collection: Mark and Sweep

Page 9: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

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

Garbage Collection: Concurrent Mark and Sweep

Page 11: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

Eclipse Memory Analyzer Tool

Page 12: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

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

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

Demo

Page 15: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

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

Immediate Dominator

Page 17: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

Immediate Dominator

Page 18: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

Immediate Dominator

Page 19: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

Immediate Dominator

Page 20: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

Immediate Dominator

Page 21: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

Demo

Page 22: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

Common pitfalls

Page 23: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

“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

Non-static Handler class

public class MyActivity extends Activity {

Handler myhandler = new Handler() { ... };

}

Page 25: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

WebView (only for 2.x)

Page 26: Александр Терещук - Memory Analyzer Tool and memory optimization tips in Android

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

Questions ?