[mono-android] Excessive JNI global references (2001) on hardware
Jonathan Pryor
jonp at xamarin.com
Fri Feb 3 15:43:11 UTC 2012
On Feb 3, 2012, at 10:28 AM, Wally McClure wrote:
> Not to interject to much into this conversation, but I am fearful of calling GC.Collect() automatically too much. For example, I find the magnetic field sensor to basically take over my htc evo when I am getting change events. I realize that you aren't talking about called a .Collect() on every change event. My concern is that something that fires so often, adding the .Collect will just result in even worse performance. Granted, I am not privy to the source and have other things to do if I was, so take what I have said for what it is worth.
>
> Maybe this is a good time for Xamarin to explain the intricacies of the Mono for Android GC?
That would require understanding them. ;-)
(Really, cross-VM GC's are black voodoo; I only partially understand how this thing works...)
That said, I'm trying to keep the docs helpful:
http://docs.xamarin.com/android/advanced_topics/garbage_collection
If there's anything that you would like specifically addressed, please let me know and I'll try to update them.
As for the automatic GC.Collect(), we'll also generate a logcat message when we do so:
I/monodroid-gc(PID): 1800 outstanding GREFs. Performing a full GC!
You're really only likely to see this on the emulator, or badly configured el-cheapo hardware devices. You'll (unfortunately) need to read the logcat output to see this message, but you'll certainly be able to workaround the GC as well by just (!) being more "hands-on" with global references and explicitly Dispose()ing of objects when you no longer need them. Enabling gref logging to see where grefs are being created will help in making this diagnosis:
http://docs.xamarin.com/android/advanced_topics/diagnostics#Global_Reference_Messages
- Jon
More information about the Monodroid
mailing list