annotate src/share/vm/oops/instanceMirrorKlass.hpp @ 4155:394404b2d9bd

Removed strict requirement for GRAAL environment variable. It only needs to be set now if the graal directory is not in the directory hierarchy of GraalVM JDK.
author Doug Simon <doug.simon@oracle.com>
date Wed, 21 Dec 2011 11:25:27 +0100
parents 63997f575155
children da91efe96a93
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2376
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
1 /*
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
4 *
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
7 * published by the Free Software Foundation.
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
8 *
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
13 * accompanied this code).
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
14 *
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
18 *
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
21 * questions.
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
22 *
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
23 */
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
24
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
25 #ifndef SHARE_VM_OOPS_INSTANCEMIRRORKLASS_HPP
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
26 #define SHARE_VM_OOPS_INSTANCEMIRRORKLASS_HPP
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
27
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
28 #include "oops/instanceKlass.hpp"
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
29
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
30 // An instanceMirrorKlass is a specialized instanceKlass for
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
31 // java.lang.Class instances. These instances are special because
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
32 // they contain the static fields of the class in addition to the
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
33 // normal fields of Class. This means they are variable sized
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
34 // instances and need special logic for computing their size and for
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
35 // iteration of their oops.
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
36
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
37
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
38 class instanceMirrorKlass: public instanceKlass {
2411
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
39 friend class VMStructs;
63997f575155 7031614: jmap -permstat fails with java.lang.InternalError in sun.jvm.hotspot.oops.OopField.getValue
never
parents: 2376
diff changeset
40
2376
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
41 private:
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
42 static int _offset_of_static_fields;
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
43
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
44 public:
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
45 // Type testing
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
46 bool oop_is_instanceMirror() const { return true; }
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
47
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
48 // Casting from klassOop
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
49 static instanceMirrorKlass* cast(klassOop k) {
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
50 assert(k->klass_part()->oop_is_instanceMirror(), "cast to instanceMirrorKlass");
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
51 return (instanceMirrorKlass*) k->klass_part();
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
52 }
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
53
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
54 // Returns the size of the instance including the extra static fields.
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
55 virtual int oop_size(oop obj) const;
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
56
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
57 // Static field offset is an offset into the Heap, should be converted by
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
58 // based on UseCompressedOop for traversal
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
59 static HeapWord* start_of_static_fields(oop obj) {
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
60 return (HeapWord*)((intptr_t)obj + offset_of_static_fields());
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
61 }
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
62
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
63 static void init_offset_of_static_fields() {
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
64 // Cache the offset of the static fields in the Class instance
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
65 assert(_offset_of_static_fields == 0, "once");
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
66 _offset_of_static_fields = instanceMirrorKlass::cast(SystemDictionary::Class_klass())->size_helper() << LogHeapWordSize;
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
67 }
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
68
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
69 static int offset_of_static_fields() {
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
70 return _offset_of_static_fields;
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
71 }
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
72
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
73 int compute_static_oop_field_count(oop obj);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
74
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
75 // Given a Klass return the size of the instance
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
76 int instance_size(KlassHandle k);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
77
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
78 // allocation
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
79 DEFINE_ALLOCATE_PERMANENT(instanceMirrorKlass);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
80 instanceOop allocate_instance(KlassHandle k, TRAPS);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
81
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
82 // Garbage collection
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
83 int oop_adjust_pointers(oop obj);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
84 void oop_follow_contents(oop obj);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
85
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
86 // Parallel Scavenge and Parallel Old
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
87 PARALLEL_GC_DECLS
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
88
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
89 int oop_oop_iterate(oop obj, OopClosure* blk) {
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
90 return oop_oop_iterate_v(obj, blk);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
91 }
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
92 int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) {
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
93 return oop_oop_iterate_v_m(obj, blk, mr);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
94 }
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
95
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
96 #define InstanceMirrorKlass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
97 int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* blk); \
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
98 int oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* blk, MemRegion mr);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
99
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
100 ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceMirrorKlass_OOP_OOP_ITERATE_DECL)
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
101 ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceMirrorKlass_OOP_OOP_ITERATE_DECL)
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
102
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
103 #ifndef SERIALGC
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
104 #define InstanceMirrorKlass_OOP_OOP_ITERATE_BACKWARDS_DECL(OopClosureType, nv_suffix) \
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
105 int oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* blk);
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
106
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
107 ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceMirrorKlass_OOP_OOP_ITERATE_BACKWARDS_DECL)
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
108 ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceMirrorKlass_OOP_OOP_ITERATE_BACKWARDS_DECL)
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
109 #endif // !SERIALGC
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
110 };
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
111
c7f3d0b4570f 7017732: move static fields into Class to prepare for perm gen removal
never
parents:
diff changeset
112 #endif // SHARE_VM_OOPS_INSTANCEMIRRORKLASS_HPP