Don't allocate GlobalRefs for BinderProxy
This removes all GlobalRef allocation as part of building BinderProxys. Previously these were used to map IBinders to the corresponding Java object, so the Java objects could be reused. We now keep that mapping at the Java level. This means we often need to call into Java to look up or allocate a BinderProxy. But this replaces a prior call to Java to dereference a WeakReference. The Java custom Java map-to-WeakReference data structure is probably not terribly efficient, but the original attachement mechanism did not seem to be either. And this avoids potentially even more catastrophic issues when the number of GlobalRefs approaches its limit. We decrease GC triggering frequency from 200 to 1000 allocated references. This now only applies to other kinds of JNI References allocated by Binder. I saw a maximum bucket size of 16 for the ProxyMap data structure while briefly exercising a freshly booted device. That occurred in system_server. Bug: 65760710 Test: Built and booted master with some debugging output. Looks sane. Change-Id: I322c4d8e9c8e198586d591580c2cdbb094906677
Loading
Please register or sign in to comment