<!--
 Copyright 1998-2003 Sun Microsystems, Inc.  All Rights Reserved.
 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.

 This code is free software; you can redistribute it and/or modify it
 under the terms of the GNU General Public License version 2 only, as
 published by the Free Software Foundation.  Sun designates this
 particular file as subject to the "Classpath" exception as provided
 by Sun in the LICENSE file that accompanied this code.

 This code is distributed in the hope that it will be useful, but WITHOUT
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 version 2 for more details (a copy is included in the LICENSE file that
 accompanied this code).

 You should have received a copy of the GNU General Public License version
 2 along with this work; if not, write to the Free Software Foundation,
 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.

 Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 CA 95054 USA or visit www.sun.com if you need additional information or
 have any questions.
-->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<body bgcolor="white">


Provides reference-object classes, which support a limited degree of
interaction with the garbage collector.  A program may use a reference object
to maintain a reference to some other object in such a way that the latter
object may still be reclaimed by the collector.  A program may also arrange to
be notified some time after the collector has determined that the reachability
of a given object has changed.


<h2>Package Specification</h2>

A <em>reference object</em> encapsulates a reference to some other object so
that the reference itself may be examined and manipulated like any other
object.  Three types of reference objects are provided, each weaker than the
last: <em>soft</em>, <em>weak</em>, and <em>phantom</em>.  Each type
corresponds to a different level of reachability, as defined below.  Soft
references are for implementing memory-sensitive caches, weak references are
for implementing canonicalizing mappings that do not prevent their keys (or
values) from being reclaimed, and phantom references are for scheduling
pre-mortem cleanup actions in a more flexible way than is possible with the
Java finalization mechanism.

<p> Each reference-object type is implemented by a subclass of the abstract
base <code>{@link java.lang.ref.Reference}</code> class.  An instance of one of
these subclasses encapsulates a single reference to a particular object, called
the <em>referent</em>.  Every reference object provides methods for getting and
clearing the reference.  Aside from the clearing operation reference objects
are otherwise immutable, so no <code>set</code> operation is provided.  A
program may further subclass these subclasses, adding whatever fields and
methods are required for its purposes, or it may use these subclasses without
change.


<h3>Notification</h3>

A program may request to be notified of changes in an object's reachability by
<em>registering</em> an appropriate reference object with a <em>reference
queue</em> at the time the reference object is created.  Some time after the
garbage collector determines that the reachability of the referent has changed
to the value corresponding to the type of the reference, it will add the
reference to the associated queue.  At this point, the reference is considered
to be <em>enqueued</em>.  The program may remove references from a queue either
by polling or by blocking until a reference becomes available.  Reference
queues are implemented by the <code>{@link java.lang.ref.ReferenceQueue}</code>
class.

<p> The relationship between a registered reference object and its queue is
one-sided.  That is, a queue does not keep track of the references that are
registered with it.  If a registered reference becomes unreachable itself, then
it will never be enqueued.  It is the responsibility of the program using
reference objects to ensure that the objects remain reachable for as long as
the program is interested in their referents.

<p> While some programs will choose to dedicate a thread to removing reference
objects from one or more queues and processing them, this is by no means
necessary.  A tactic that often works well is to examine a reference queue in
the course of performing some other fairly-frequent action.  For example, a
hashtable that uses weak references to implement weak keys could poll its
reference queue each time the table is accessed.  This is how the <code>{@link
java.util.WeakHashMap}</code> class works.  Because the <code>{@link
java.lang.ref.ReferenceQueue#poll ReferenceQueue.poll}</code> method simply
checks an internal data structure, this check will add little overhead to the
hashtable access methods.


<h3>Automatically-cleared references</h3>

Soft and weak references are automatically cleared by the collector before
being added to the queues with which they are registered, if any.  Therefore
soft and weak references need not be registered with a queue in order to be
useful, while phantom references do.  An object that is reachable via phantom
references will remain so until all such references are cleared or themselves
become unreachable.


<a name="reachability"></a>
<h3>Reachability</h3>

Going from strongest to weakest, the different levels of reachability reflect
the life cycle of an object.  They are operationally defined as follows:

<ul>

<li> An object is <em>strongly reachable</em> if it can be reached by some
thread without traversing any reference objects.  A newly-created object is
strongly reachable by the thread that created it.

<li> An object is <em>softly reachable</em> if it is not strongly reachable but
can be reached by traversing a soft reference.

<li> An object is <em>weakly reachable</em> if it is neither strongly nor
softly reachable but can be reached by traversing a weak reference.  When the
weak references to a weakly-reachable object are cleared, the object becomes
eligible for finalization.

<li> An object is <em>phantom reachable</em> if it is neither strongly, softly,
nor weakly reachable, it has been finalized, and some phantom reference refers
to it.

<li> Finally, an object is <em>unreachable</em>, and therefore eligible for
reclamation, when it is not reachable in any of the above ways.

</ul>


@author	  Mark Reinhold
@since	  1.2

<!--
<h2>Related Documentation</h2>

For overviews, tutorials, examples, guides, and tool documentation, please see:
<ul>
  <li><a href="">##### REFER TO NON-SPEC DOCUMENTATION HERE #####</a>
</ul>
-->
</body>
</html>
