annotate src/share/vm/oops/arrayKlass.cpp @ 6862:8a5ea0a9ccc4

7127708: G1: change task num types from int to uint in concurrent mark Summary: Change the type of various task num fields, parameters etc to unsigned and rename them to be more consistent with the other collectors. Code changes were also reviewed by Vitaly Davidovich. Reviewed-by: johnc Contributed-by: Kaushik Srenevasan <kaushik@twitter.com>
author johnc
date Sat, 06 Oct 2012 01:17:44 -0700
parents da91efe96a93
children d8ce2825b193
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
5935
a735aec54ea4 7123170: JCK vm/jvmti/ResourceExhausted/resexh001/resexh00101/ tests fails since 7u4 b02
sspitsyn
parents: 2426
diff changeset
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1142
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1142
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1142
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
25 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
26 #include "classfile/javaClasses.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
27 #include "classfile/systemDictionary.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
28 #include "classfile/vmSymbols.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
29 #include "gc_interface/collectedHeap.inline.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
30 #include "jvmtifiles/jvmti.h"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
31 #include "memory/gcLocker.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
32 #include "memory/universe.inline.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
33 #include "oops/arrayKlass.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
34 #include "oops/arrayOop.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
35 #include "oops/instanceKlass.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
36 #include "oops/objArrayOop.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
37 #include "oops/oop.inline.hpp"
0
a61af66fc99e Initial load
duke
parents:
diff changeset
38
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
39 int arrayKlass::static_size(int header_size) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
40 // size of an array klass object
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
41 assert(header_size <= InstanceKlass::header_size(), "bad header size");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
42 // If this assert fails, see comments in base_create_array_klass.
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
43 header_size = InstanceKlass::header_size();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
44 int vtable_len = Universe::base_vtable_size();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
45 #ifdef _LP64
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
46 int size = header_size + align_object_offset(vtable_len);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
47 #else
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
48 int size = header_size + vtable_len;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
49 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
50 return align_object_size(size);
a61af66fc99e Initial load
duke
parents:
diff changeset
51 }
a61af66fc99e Initial load
duke
parents:
diff changeset
52
a61af66fc99e Initial load
duke
parents:
diff changeset
53
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
54 Klass* arrayKlass::java_super() const {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
55 if (super() == NULL) return NULL; // bootstrap case
a61af66fc99e Initial load
duke
parents:
diff changeset
56 // Array klasses have primary supertypes which are not reported to Java.
a61af66fc99e Initial load
duke
parents:
diff changeset
57 // Example super chain: String[][] -> Object[][] -> Object[] -> Object
1142
4ce7240d622c 6914300: ciEnv should export all well known classes
never
parents: 948
diff changeset
58 return SystemDictionary::Object_klass();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
59 }
a61af66fc99e Initial load
duke
parents:
diff changeset
60
a61af66fc99e Initial load
duke
parents:
diff changeset
61
a61af66fc99e Initial load
duke
parents:
diff changeset
62 oop arrayKlass::multi_allocate(int rank, jint* sizes, TRAPS) {
a61af66fc99e Initial load
duke
parents:
diff changeset
63 ShouldNotReachHere();
a61af66fc99e Initial load
duke
parents:
diff changeset
64 return NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
65 }
a61af66fc99e Initial load
duke
parents:
diff changeset
66
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
67 Method* arrayKlass::uncached_lookup_method(Symbol* name, Symbol* signature) const {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
68 // There are no methods in an array klass but the super class (Object) has some
a61af66fc99e Initial load
duke
parents:
diff changeset
69 assert(super(), "super klass must be present");
a61af66fc99e Initial load
duke
parents:
diff changeset
70 return Klass::cast(super())->uncached_lookup_method(name, signature);
a61af66fc99e Initial load
duke
parents:
diff changeset
71 }
a61af66fc99e Initial load
duke
parents:
diff changeset
72
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
73 arrayKlass::arrayKlass(Symbol* name) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
74 set_alloc_size(0);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
75 set_name(name);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
76
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
77 set_super(Universe::is_bootstrapping() ? (Klass*)NULL : SystemDictionary::Object_klass());
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
78 set_layout_helper(Klass::_lh_neutral_value);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
79 set_dimension(1);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
80 set_higher_dimension(NULL);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
81 set_lower_dimension(NULL);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
82 set_component_mirror(NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
83 // Arrays don't add any new methods, so their vtable is the same size as
a61af66fc99e Initial load
duke
parents:
diff changeset
84 // the vtable of klass Object.
a61af66fc99e Initial load
duke
parents:
diff changeset
85 int vtable_size = Universe::base_vtable_size();
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
86 set_vtable_length(vtable_size);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
87 set_is_cloneable(); // All arrays are considered to be cloneable (See JLS 20.1.5)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
88 }
a61af66fc99e Initial load
duke
parents:
diff changeset
89
a61af66fc99e Initial load
duke
parents:
diff changeset
90
a61af66fc99e Initial load
duke
parents:
diff changeset
91 // Initialization of vtables and mirror object is done separatly from base_create_array_klass,
a61af66fc99e Initial load
duke
parents:
diff changeset
92 // since a GC can happen. At this point all instance variables of the arrayKlass must be setup.
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
93 void arrayKlass::complete_create_array_klass(arrayKlass* k, KlassHandle super_klass, TRAPS) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
94 ResourceMark rm(THREAD);
a61af66fc99e Initial load
duke
parents:
diff changeset
95 k->initialize_supers(super_klass(), CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
96 k->vtable()->initialize_vtable(false, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
97 java_lang_Class::create_mirror(k, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
98 }
a61af66fc99e Initial load
duke
parents:
diff changeset
99
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
100 GrowableArray<Klass*>* arrayKlass::compute_secondary_supers(int num_extra_slots) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
101 // interfaces = { cloneable_klass, serializable_klass };
a61af66fc99e Initial load
duke
parents:
diff changeset
102 assert(num_extra_slots == 0, "sanity of primitive array type");
a61af66fc99e Initial load
duke
parents:
diff changeset
103 // Must share this for correct bootstrapping!
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
104 set_secondary_supers(Universe::the_array_interfaces_array());
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
105 return NULL;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
106 }
a61af66fc99e Initial load
duke
parents:
diff changeset
107
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
108 bool arrayKlass::compute_is_subtype_of(Klass* k) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
109 // An array is a subtype of Serializable, Clonable, and Object
1142
4ce7240d622c 6914300: ciEnv should export all well known classes
never
parents: 948
diff changeset
110 return k == SystemDictionary::Object_klass()
4ce7240d622c 6914300: ciEnv should export all well known classes
never
parents: 948
diff changeset
111 || k == SystemDictionary::Cloneable_klass()
4ce7240d622c 6914300: ciEnv should export all well known classes
never
parents: 948
diff changeset
112 || k == SystemDictionary::Serializable_klass();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
113 }
a61af66fc99e Initial load
duke
parents:
diff changeset
114
a61af66fc99e Initial load
duke
parents:
diff changeset
115
a61af66fc99e Initial load
duke
parents:
diff changeset
116 inline intptr_t* arrayKlass::start_of_vtable() const {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
117 // all vtables start at the same place, that's why we use InstanceKlass::header_size here
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
118 return ((intptr_t*)this) + InstanceKlass::header_size();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
119 }
a61af66fc99e Initial load
duke
parents:
diff changeset
120
a61af66fc99e Initial load
duke
parents:
diff changeset
121
a61af66fc99e Initial load
duke
parents:
diff changeset
122 klassVtable* arrayKlass::vtable() const {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
123 KlassHandle kh(Thread::current(), this);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
124 return new klassVtable(kh, start_of_vtable(), vtable_length() / vtableEntry::size());
a61af66fc99e Initial load
duke
parents:
diff changeset
125 }
a61af66fc99e Initial load
duke
parents:
diff changeset
126
a61af66fc99e Initial load
duke
parents:
diff changeset
127
a61af66fc99e Initial load
duke
parents:
diff changeset
128 objArrayOop arrayKlass::allocate_arrayArray(int n, int length, TRAPS) {
a61af66fc99e Initial load
duke
parents:
diff changeset
129 if (length < 0) {
a61af66fc99e Initial load
duke
parents:
diff changeset
130 THROW_0(vmSymbols::java_lang_NegativeArraySizeException());
a61af66fc99e Initial load
duke
parents:
diff changeset
131 }
a61af66fc99e Initial load
duke
parents:
diff changeset
132 if (length > arrayOopDesc::max_array_length(T_ARRAY)) {
876
1413494da700 6850957: Honor -XX:OnOutOfMemoryError when array size exceeds VM limit
martin
parents: 0
diff changeset
133 report_java_out_of_memory("Requested array size exceeds VM limit");
5935
a735aec54ea4 7123170: JCK vm/jvmti/ResourceExhausted/resexh001/resexh00101/ tests fails since 7u4 b02
sspitsyn
parents: 2426
diff changeset
134 JvmtiExport::post_array_size_exhausted();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
135 THROW_OOP_0(Universe::out_of_memory_error_array_size());
a61af66fc99e Initial load
duke
parents:
diff changeset
136 }
a61af66fc99e Initial load
duke
parents:
diff changeset
137 int size = objArrayOopDesc::object_size(length);
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
138 Klass* k = array_klass(n+dimension(), CHECK_0);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
139 arrayKlass* ak = arrayKlass::cast(k);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
140 objArrayOop o =
a61af66fc99e Initial load
duke
parents:
diff changeset
141 (objArrayOop)CollectedHeap::array_allocate(ak, size, length, CHECK_0);
a61af66fc99e Initial load
duke
parents:
diff changeset
142 // initialization to NULL not necessary, area already cleared
a61af66fc99e Initial load
duke
parents:
diff changeset
143 return o;
a61af66fc99e Initial load
duke
parents:
diff changeset
144 }
a61af66fc99e Initial load
duke
parents:
diff changeset
145
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
146 void arrayKlass::array_klasses_do(void f(Klass* k, TRAPS), TRAPS) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
147 Klass* k = this;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
148 // Iterate over this array klass and all higher dimensions
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
149 while (k != NULL) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
150 f(k, CHECK);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
151 k = arrayKlass::cast(k)->higher_dimension();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
152 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
153 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
154
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
155 void arrayKlass::array_klasses_do(void f(Klass* k)) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
156 Klass* k = this;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
157 // Iterate over this array klass and all higher dimensions
a61af66fc99e Initial load
duke
parents:
diff changeset
158 while (k != NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
159 f(k);
a61af66fc99e Initial load
duke
parents:
diff changeset
160 k = arrayKlass::cast(k)->higher_dimension();
a61af66fc99e Initial load
duke
parents:
diff changeset
161 }
a61af66fc99e Initial load
duke
parents:
diff changeset
162 }
a61af66fc99e Initial load
duke
parents:
diff changeset
163
a61af66fc99e Initial load
duke
parents:
diff changeset
164
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
165 void arrayKlass::with_array_klasses_do(void f(Klass* k)) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
166 array_klasses_do(f);
a61af66fc99e Initial load
duke
parents:
diff changeset
167 }
a61af66fc99e Initial load
duke
parents:
diff changeset
168
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
169
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
170 // GC support
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
171
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
172 void arrayKlass::oops_do(OopClosure* cl) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
173 Klass::oops_do(cl);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
174
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
175 cl->do_oop(adr_component_mirror());
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
176 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
177
0
a61af66fc99e Initial load
duke
parents:
diff changeset
178 // JVM support
a61af66fc99e Initial load
duke
parents:
diff changeset
179
a61af66fc99e Initial load
duke
parents:
diff changeset
180 jint arrayKlass::compute_modifier_flags(TRAPS) const {
a61af66fc99e Initial load
duke
parents:
diff changeset
181 return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC;
a61af66fc99e Initial load
duke
parents:
diff changeset
182 }
a61af66fc99e Initial load
duke
parents:
diff changeset
183
a61af66fc99e Initial load
duke
parents:
diff changeset
184 // JVMTI support
a61af66fc99e Initial load
duke
parents:
diff changeset
185
a61af66fc99e Initial load
duke
parents:
diff changeset
186 jint arrayKlass::jvmti_class_status() const {
a61af66fc99e Initial load
duke
parents:
diff changeset
187 return JVMTI_CLASS_STATUS_ARRAY;
a61af66fc99e Initial load
duke
parents:
diff changeset
188 }
a61af66fc99e Initial load
duke
parents:
diff changeset
189
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
190 void arrayKlass::remove_unshareable_info() {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
191 Klass::remove_unshareable_info();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
192 // Clear the java mirror
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
193 set_component_mirror(NULL);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
194 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
195
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
196 void arrayKlass::restore_unshareable_info(TRAPS) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
197 Klass::restore_unshareable_info(CHECK);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
198 // Klass recreates the component mirror also
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
199 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
200
0
a61af66fc99e Initial load
duke
parents:
diff changeset
201 // Printing
a61af66fc99e Initial load
duke
parents:
diff changeset
202
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
203 void arrayKlass::print_on(outputStream* st) const {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
204 assert(is_klass(), "must be klass");
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
205 Klass::print_on(st);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
206 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
207
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
208 void arrayKlass::print_value_on(outputStream* st) const {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
209 assert(is_klass(), "must be klass");
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
210 for(int index = 0; index < dimension(); index++) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
211 st->print("[]");
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
212 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
213 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
214
0
a61af66fc99e Initial load
duke
parents:
diff changeset
215 void arrayKlass::oop_print_on(oop obj, outputStream* st) {
a61af66fc99e Initial load
duke
parents:
diff changeset
216 assert(obj->is_array(), "must be array");
a61af66fc99e Initial load
duke
parents:
diff changeset
217 Klass::oop_print_on(obj, st);
a61af66fc99e Initial load
duke
parents:
diff changeset
218 st->print_cr(" - length: %d", arrayOop(obj)->length());
a61af66fc99e Initial load
duke
parents:
diff changeset
219 }
a61af66fc99e Initial load
duke
parents:
diff changeset
220
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
221
0
a61af66fc99e Initial load
duke
parents:
diff changeset
222 // Verification
a61af66fc99e Initial load
duke
parents:
diff changeset
223
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
224 void arrayKlass::verify_on(outputStream* st) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
225 Klass::verify_on(st);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
226
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
227 if (component_mirror() != NULL) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
228 guarantee(component_mirror()->klass() != NULL, "should have a class");
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
229 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
230 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5935
diff changeset
231
0
a61af66fc99e Initial load
duke
parents:
diff changeset
232 void arrayKlass::oop_verify_on(oop obj, outputStream* st) {
a61af66fc99e Initial load
duke
parents:
diff changeset
233 guarantee(obj->is_array(), "must be array");
a61af66fc99e Initial load
duke
parents:
diff changeset
234 arrayOop a = arrayOop(obj);
a61af66fc99e Initial load
duke
parents:
diff changeset
235 guarantee(a->length() >= 0, "array with negative length?");
a61af66fc99e Initial load
duke
parents:
diff changeset
236 }