py - Pierre Yves Ricau
py - Pierre Yves Ricau
In Android VMs, AFAIK there is only ever one instance of each class. However, classes can become unloaded and loaded again later, if there are no side effects. That's totally...
HprofPrimitiveArrayStripper clears all primitive arrays, erasing any and all PII. However strings can be super useful to analyze leak traces (e.g. thread name, scope name, etc). We could keep track...
At Square we built an internal tool called ClassShot that dumps the heap to find the list of annotated classes and also reads the APK to find the full list...
When a java local is a gc root then it can be hard to understand the leak as we don't know what the stack looks like (android dumps don't include...
Android can unload and reload classes. Currently the LeakCanary heap dump parser assumes there's only one class object for each class. Unfortunately we've found cases where there are two objects...
Threads don't have a clear lifecycle, so there's no easy way to know when a thread should be GCed, unless they get exited but that's usually not causing leaks. One...
Example trace: ``` ┬─── │ GC Root: Java local variable │ ├─ android.os.HandlerThread thread │ Leaking: UNKNOWN │ Retaining 3.8 MB in 42126 objects │ Thread name: 'Sq-LCR' │ ↓...
This is inspired by the [BLeak](http://plasma-umass.org/BLeak/) paper from @jvilk High level, this requires looping on a scenario, and comparing the state of the heap between each run, looking for paths...
This is inspired by the [BLeak](http://plasma-umass.org/BLeak/) paper from @jvilk We currently report retained size, which is computed on dominators. Retained size only considers objects uniquely owned by dominators. The "leaktrace"...
This is an idea from the paper [LeakChaser: helping programmers narrow down causes of memory leaks ](https://dl.acm.org/doi/10.1145/1993498.1993530) `ReachabilityWatcher.expectWeaklyReachable(object)` is somewhat equivalent to `assert-dead(object)` in [GC Assertions: Using the Garbage Collector...