Skip to content

Commit ee0bb26

Browse files
committed
Add ManagedObjectReferenceManager for CoreCLR
Add a new ManagedObjectReferenceManager that maintains GREF and WREF counters entirely in managed code using Interlocked operations, with zero P/Invoke overhead. Logging is disabled (LogGlobalReferenceMessages and LogLocalReferenceMessages return false). The gref_gc_threshold check for triggering full GC is preserved. AndroidObjectReferenceManager is kept unchanged for Mono. CoreCLR uses ManagedObjectReferenceManager, selected at runtime in AndroidRuntimeOptions. NativeAOT uses the existing Java.Interop.ManagedObjectReferenceManager with null log writers.
1 parent 6748bb1 commit ee0bb26

File tree

3 files changed

+9
-2
lines changed

3 files changed

+9
-2
lines changed

src/Microsoft.Android.Runtime.NativeAOT/Java.Interop/JreRuntime.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ static NativeAotRuntimeOptions CreateJreVM (NativeAotRuntimeOptions builder)
6262
#endif // NET
6363

6464
builder.ValueManager ??= ManagedValueManager.GetOrCreateInstance();
65-
builder.ObjectReferenceManager ??= new Android.Runtime.AndroidObjectReferenceManager ();
65+
builder.ObjectReferenceManager ??= new ManagedObjectReferenceManager (null, null);
6666

6767
if (builder.InvocationPointer != IntPtr.Zero || builder.EnvironmentPointer != IntPtr.Zero)
6868
return builder;

src/Mono.Android/Android.Runtime/AndroidRuntime.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
using Java.Interop.Tools.TypeNameMappings;
1414
using System.Diagnostics.CodeAnalysis;
1515

16+
using RuntimeFeature = Microsoft.Android.Runtime.RuntimeFeature;
17+
1618
#if JAVA_INTEROP
1719
namespace Android.Runtime {
1820

@@ -94,7 +96,9 @@ public AndroidRuntimeOptions (IntPtr jnienv,
9496
EnvironmentPointer = jnienv;
9597
ClassLoader = new JniObjectReference (classLoader, JniObjectReferenceType.Global);
9698
InvocationPointer = vm;
97-
ObjectReferenceManager = new AndroidObjectReferenceManager ();
99+
ObjectReferenceManager = RuntimeFeature.IsCoreClrRuntime
100+
? new Java.Interop.ManagedObjectReferenceManager (null, null)
101+
: new AndroidObjectReferenceManager ();
98102
TypeManager = typeManager;
99103
ValueManager = valueManager;
100104
UseMarshalMemberBuilder = false;

src/Mono.Android/Mono.Android.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@
7070
</ItemGroup>
7171

7272
<ItemGroup>
73+
<Compile Include="..\Microsoft.Android.Runtime.NativeAOT\Java.Interop\ManagedObjectReferenceManager.cs">
74+
<Link>Java.Interop\ManagedObjectReferenceManager.cs</Link>
75+
</Compile>
7376
<Compile Include="..\..\external\Java.Interop\src\Java.Interop.Tools.TypeNameMappings\Java.Interop.Tools.TypeNameMappings\JavaNativeTypeManager.cs">
7477
<Link>JavaNativeTypeManager.cs</Link>
7578
</Compile>

0 commit comments

Comments
 (0)