SpockAdb
SpockAdb copied to clipboard
AdbControllerImp leaks via ADB device listener
We've seen the following leak in diagnostic reports from Android Studio users:
1.19G 1 ROOT: Static field: com.android.ddmlib.AndroidDebugBridge.sDeviceListeners
1.19G 1 (root): java.util.concurrent.CopyOnWriteArraySet
1.19G 1 al: java.util.concurrent.CopyOnWriteArrayList
1.19G 1 array: java.lang.Object[]
1.19G 6 []: spock.adb.AdbControllerImp
472M 5 project: com.intellij.openapi.project.impl.ProjectImpl (disposed)
It looks like AdbControllerImp adds itself as a device change listener and never unregisters itself (except for refresh(), where it immediately re-registers itself). This references stale projects and other large data structures, keeping them in memory indefinitely.