comparison src/share/vm/oops/instanceRefKlass.hpp @ 0:a61af66fc99e jdk7-b24

Initial load
author duke
date Sat, 01 Dec 2007 00:00:00 +0000
parents
children 37f87013dfd8
comparison
equal deleted inserted replaced
-1:000000000000 0:a61af66fc99e
1 /*
2 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 *
23 */
24
25 // An instanceRefKlass is a specialized instanceKlass for Java
26 // classes that are subclasses of java/lang/ref/Reference.
27 //
28 // These classes are used to implement soft/weak/final/phantom
29 // references and finalization, and need special treatment by the
30 // garbage collector.
31 //
32 // During GC discovered reference objects are added (chained) to one
33 // of the four lists below, depending on the type of reference.
34 // The linked occurs through the next field in class java/lang/ref/Reference.
35 //
36 // Afterwards, the discovered references are processed in decreasing
37 // order of reachability. Reference objects eligible for notification
38 // are linked to the static pending_list in class java/lang/ref/Reference,
39 // and the pending list lock object in the same class is notified.
40
41
42 class instanceRefKlass: public instanceKlass {
43 public:
44 // Type testing
45 bool oop_is_instanceRef() const { return true; }
46
47 // Casting from klassOop
48 static instanceRefKlass* cast(klassOop k) {
49 assert(k->klass_part()->oop_is_instanceRef(), "cast to instanceRefKlass");
50 return (instanceRefKlass*) k->klass_part();
51 }
52
53 // allocation
54 DEFINE_ALLOCATE_PERMANENT(instanceRefKlass);
55
56 // Garbage collection
57 int oop_adjust_pointers(oop obj);
58 void oop_follow_contents(oop obj);
59
60 // Parallel Scavenge and Parallel Old
61 PARALLEL_GC_DECLS
62
63 int oop_oop_iterate(oop obj, OopClosure* blk) {
64 return oop_oop_iterate_v(obj, blk);
65 }
66 int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) {
67 return oop_oop_iterate_v_m(obj, blk, mr);
68 }
69
70 #define InstanceRefKlass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \
71 int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* blk); \
72 int oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* blk, MemRegion mr);
73
74 ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceRefKlass_OOP_OOP_ITERATE_DECL)
75 ALL_OOP_OOP_ITERATE_CLOSURES_3(InstanceRefKlass_OOP_OOP_ITERATE_DECL)
76
77 static void release_and_notify_pending_list_lock(BasicLock *pending_list_basic_lock);
78 static void acquire_pending_list_lock(BasicLock *pending_list_basic_lock);
79
80 // Update non-static oop maps so 'referent', 'nextPending' and
81 // 'discovered' will look like non-oops
82 static void update_nonstatic_oop_maps(klassOop k);
83
84 public:
85 // Verification
86 void oop_verify_on(oop obj, outputStream* st);
87 };