RE: [Ikvm-developers] Reference queus (was: SoftReference)
Brought to you by:
jfrijters
From: Jeroen F. <je...@su...> - 2006-03-11 13:53:04
|
Paolo Molaro wrote: > In mono/.net I guess we'd have to queue GCHandles instead of > WeakReference objects: would that work for you? Initialy I thought it would make sense to use GCHandle, but I would very much like to have a higher level abstraction that doesn't require full trust. This basically also rules out using WeakReference as well, because it too requires full trust when subclassing (which is the typicall way you would attach additional data to it that you require after the reference gets posted to the queue). > Also: how do you think the API should look like in C#? > How is the access to this queue regulated for different subsystems? > Who removes the entries from this queue? Are all the handles posted or > just the ones that are specially registered? The user can instantiate these queues and only the references that are registered with it are posted to it. The only efficient way to implement this (that I can think of), is the way it is done in Java, with explicit support from the GC. There is a class Reference that is treated specially by the runtime/GC. When an instance is created it gets added to a list (similar to the list for finalizable objects) and after every GC mark phase the GC traverses the list of References and clears and enqueues the ones that referred to unreachable objects. The queue is basically a linked list of References (hence it requires no memory allocations to add to it and can be safely manipulated by the GC). Regards, Jeroen |