As Tim said the implementation of ReferenceQueue in DRLVM kernel classes uses linked list rather than array. What Xiao-Feng said is also the case. In DRLVM, VM finds out those references that need enqueue and put them into a VM queue during GC. The VM queue is implemented in array. Immediately after GC the enqueue() method is invoked. This action detaches the according reference from the VM queue and linkes it into ReferenceQueue.
Thanks, ligang On 6/25/08, Xiao-Feng Li <[EMAIL PROTECTED]> wrote: > > IIRC, Harmony enqueues the objects into a VM queue (C structure); then > after GC, the enqueue() methods are really invoked for all of them in > the VM queue. This is similar to the finalization processing. I need > double check. > > Thanks, > xiaofeng > > On Wed, Jun 25, 2008 at 8:48 PM, Ian Rogers <[EMAIL PROTECTED]> > wrote: > > Hi, > > > > I'm having a problem with java.lang.ref.ReferenceQueue.enqueue in that it > > queues references onto an array during GC, and that this array may need > to > > be grown during the GC. Generating new objects during GC is something of > a > > gray area, in the VM I'm working with it is not allowed. An alternative > is > > to have a field in Reference that allows references to be linked > together. > > Should this approach be adopted for all of Harmony or just within our VM? > > > > Thanks, > > Ian Rogers > > -- > > http://www.cs.man.ac.uk/~irogers/ > > > > > > -- > http://xiao-feng.blogspot.com >
