Skip to content

[native, Mono.Android] Remove WeakReference support #9454

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 25, 2024

Conversation

jonpryor
Copy link
Member

Context: dotnet/java-interop#1255
Context: https://github.com/xamarin/monodroid/commit/a5c52905293d7eecdb3c078da62100081b338045
Context: https://issuetracker.google.com/issues/36986478
Context: https://github.com/dotnet/android/blob/b56d68fe2a2c2dffa47eb7e41ae08a00fda86367/Documentation/workflow/SystemProperties.md#debugmonowref

Android did not support JNI Weak Global References until API-8 (Android 2.2). To allow Mono for Android applications to run on API-7 and earlier devices, while using JNI Weak Global References when possible (fewer GC allocations, better performance), the GC bridge supported two modes of operation:

With the exception of a "minor" (lol) issue in KitKat v4.4.2 (API-19) -- in which JNIEnv::NewGlobalRef() around a collected JNI Weak Global Reference would return a non-NULL value, which would result in app crashes; xamarin/monodroid@a5c52905 added a workaround to use the WeakReference backend on Android 4.4.2 -- the debug.mono.wref=java backend has not been used since 2014.

Apps could use @(AndroidEnvironment) to set debug.mono.wref=java, but there is no reason to do so (worse performance!), nor has anyone done so on GitHub.com (no matches for debug.mono.wref within files that would be used with @(AndroidEnvironment)).

Cleanup src/native and src/Mono.Android, and remove support for the debug.mono.wref=java backend.

@jonpryor jonpryor force-pushed the dev/jonp/jonp-remove-weak_handle branch from 8aa4bd0 to 6b24700 Compare October 23, 2024 17:54
Context: dotnet/java-interop#1255
Context: xamarin/monodroid@a5c5290
Context: https://issuetracker.google.com/issues/36986478
Context: https://github.com/dotnet/android/blob/b56d68fe2a2c2dffa47eb7e41ae08a00fda86367/Documentation/workflow/SystemProperties.md#debugmonowref

Android did not support [JNI Weak Global References][0] until API-8
(Android 2.2).  To allow Mono for Android applications to run on
API-7 and earlier devices, while using JNI Weak Global References
when possible (fewer GC allocations, better performance), the GC
bridge supported two modes of operation:

  * `debug.mono.wref=jni`: Use JNI Weak Global References.
  * `debug.mono.wref=java`: Use [`java.lang.ref.WeakReference`][1].

With the exception of a ["minor" (lol) issue][2] in KitKat v4.4.2
(API-19) -- in which `JNIEnv::NewGlobalRef()` around a collected
JNI Weak Global Reference would return a non-`NULL` value, which
would result in app crashes; xamarin/monodroid@a5c52905 added
a workaround to use the `WeakReference` backend on Android 4.4.2 --
the `debug.mono.wref=java` backend has not been used since *2014*.

Apps *could* use [`@(AndroidEnvironment)`][3] to set
`debug.mono.wref=java`, but there is no reason to do so (worse
performance!), [nor has anyone done so on GitHub.com][4]
(no matches for `debug.mono.wref` within files that would be used
with `@(AndroidEnvironment)`).

Cleanup src/native and src/Mono.Android, and *remove* support for the
`debug.mono.wref=java` backend.

[0]: https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html#weak_global_references
[1]: https://developer.android.com/reference/java/lang/ref/WeakReference
[2]: https://issuetracker.google.com/issues/36986478
[3]: https://learn.microsoft.com/dotnet/android/building-apps/build-items#androidenvironment
[4]: https://github.com/search?type=code&q=debug.mono.wref
@jonpryor jonpryor force-pushed the dev/jonp/jonp-remove-weak_handle branch from 6b24700 to 55632c3 Compare October 23, 2024 18:14
@jonpryor jonpryor requested a review from grendello October 23, 2024 18:32
@jonpryor jonpryor merged commit e98ae9c into main Oct 25, 2024
56 of 58 checks passed
@jonpryor jonpryor deleted the dev/jonp/jonp-remove-weak_handle branch October 25, 2024 17:06
@github-actions github-actions bot locked and limited conversation to collaborators Nov 25, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants