Mercurial > hg > truffle
comparison src/share/vm/prims/jvmtiGetLoadedClasses.cpp @ 6725:da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author | coleenp |
---|---|
date | Sat, 01 Sep 2012 13:25:18 -0400 |
parents | d2a62e0f25eb |
children | 070d523b96a7 |
comparison
equal
deleted
inserted
replaced
6724:36d1d483d5d6 | 6725:da91efe96a93 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 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 | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
164 result[index] = (jclass) env->jni_reference(get_element(index)); | 164 result[index] = (jclass) env->jni_reference(get_element(index)); |
165 } | 165 } |
166 } | 166 } |
167 | 167 |
168 // Finally, the static methods that are the callbacks | 168 // Finally, the static methods that are the callbacks |
169 static void increment(klassOop k) { | 169 static void increment(Klass* k) { |
170 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); | 170 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); |
171 if (that->get_initiatingLoader() == NULL) { | 171 if (that->get_initiatingLoader() == NULL) { |
172 for (klassOop l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { | 172 for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { |
173 that->set_count(that->get_count() + 1); | 173 that->set_count(that->get_count() + 1); |
174 } | 174 } |
175 } else if (k != NULL) { | 175 } else if (k != NULL) { |
176 // if initiating loader not null, just include the instance with 1 dimension | 176 // if initiating loader not null, just include the instance with 1 dimension |
177 that->set_count(that->get_count() + 1); | 177 that->set_count(that->get_count() + 1); |
178 } | 178 } |
179 } | 179 } |
180 | 180 |
181 static void increment_with_loader(klassOop k, oop loader) { | 181 static void increment_with_loader(Klass* k, ClassLoaderData* loader_data) { |
182 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); | 182 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); |
183 if (loader == JNIHandles::resolve(that->get_initiatingLoader())) { | 183 oop class_loader = loader_data->class_loader(); |
184 for (klassOop l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { | 184 if (class_loader == JNIHandles::resolve(that->get_initiatingLoader())) { |
185 for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { | |
185 that->set_count(that->get_count() + 1); | 186 that->set_count(that->get_count() + 1); |
186 } | 187 } |
187 } | 188 } |
188 } | 189 } |
189 | 190 |
190 static void prim_array_increment_with_loader(klassOop array, oop loader) { | 191 static void prim_array_increment_with_loader(Klass* array, ClassLoaderData* loader_data) { |
191 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); | 192 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); |
192 if (loader == JNIHandles::resolve(that->get_initiatingLoader())) { | 193 oop class_loader = loader_data->class_loader(); |
194 if (class_loader == JNIHandles::resolve(that->get_initiatingLoader())) { | |
193 that->set_count(that->get_count() + 1); | 195 that->set_count(that->get_count() + 1); |
194 } | 196 } |
195 } | 197 } |
196 | 198 |
197 static void add(klassOop k) { | 199 static void add(Klass* k) { |
198 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); | 200 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); |
199 if (that->available()) { | 201 if (that->available()) { |
200 if (that->get_initiatingLoader() == NULL) { | 202 if (that->get_initiatingLoader() == NULL) { |
201 for (klassOop l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { | 203 for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { |
202 oop mirror = Klass::cast(l)->java_mirror(); | 204 oop mirror = Klass::cast(l)->java_mirror(); |
203 that->set_element(that->get_index(), mirror); | 205 that->set_element(that->get_index(), mirror); |
204 that->set_index(that->get_index() + 1); | 206 that->set_index(that->get_index() + 1); |
205 } | 207 } |
206 } else if (k != NULL) { | 208 } else if (k != NULL) { |
210 that->set_index(that->get_index() + 1); | 212 that->set_index(that->get_index() + 1); |
211 } | 213 } |
212 } | 214 } |
213 } | 215 } |
214 | 216 |
215 static void add_with_loader(klassOop k, oop loader) { | 217 static void add_with_loader(Klass* k, ClassLoaderData* loader_data) { |
216 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); | 218 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); |
217 if (that->available()) { | 219 if (that->available()) { |
218 if (loader == JNIHandles::resolve(that->get_initiatingLoader())) { | 220 oop class_loader = loader_data->class_loader(); |
219 for (klassOop l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { | 221 if (class_loader == JNIHandles::resolve(that->get_initiatingLoader())) { |
222 for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { | |
220 oop mirror = Klass::cast(l)->java_mirror(); | 223 oop mirror = Klass::cast(l)->java_mirror(); |
221 that->set_element(that->get_index(), mirror); | 224 that->set_element(that->get_index(), mirror); |
222 that->set_index(that->get_index() + 1); | 225 that->set_index(that->get_index() + 1); |
223 } | 226 } |
224 } | 227 } |
226 } | 229 } |
227 | 230 |
228 // increment the count for the given basic type array class (and any | 231 // increment the count for the given basic type array class (and any |
229 // multi-dimensional arrays). For example, for [B we check for | 232 // multi-dimensional arrays). For example, for [B we check for |
230 // [[B, [[[B, .. and the count is incremented for each one that exists. | 233 // [[B, [[[B, .. and the count is incremented for each one that exists. |
231 static void increment_for_basic_type_arrays(klassOop k) { | 234 static void increment_for_basic_type_arrays(Klass* k) { |
232 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); | 235 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); |
233 assert(that != NULL, "no JvmtiGetLoadedClassesClosure"); | 236 assert(that != NULL, "no JvmtiGetLoadedClassesClosure"); |
234 for (klassOop l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { | 237 for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { |
235 that->set_count(that->get_count() + 1); | 238 that->set_count(that->get_count() + 1); |
236 } | 239 } |
237 } | 240 } |
238 | 241 |
239 // add the basic type array class and its multi-dimensional array classes to the list | 242 // add the basic type array class and its multi-dimensional array classes to the list |
240 static void add_for_basic_type_arrays(klassOop k) { | 243 static void add_for_basic_type_arrays(Klass* k) { |
241 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); | 244 JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this(); |
242 assert(that != NULL, "no JvmtiGetLoadedClassesClosure"); | 245 assert(that != NULL, "no JvmtiGetLoadedClassesClosure"); |
243 assert(that->available(), "no list"); | 246 assert(that->available(), "no list"); |
244 for (klassOop l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { | 247 for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { |
245 oop mirror = Klass::cast(l)->java_mirror(); | 248 oop mirror = Klass::cast(l)->java_mirror(); |
246 that->set_element(that->get_index(), mirror); | 249 that->set_element(that->get_index(), mirror); |
247 that->set_index(that->get_index() + 1); | 250 that->set_index(that->get_index() + 1); |
248 } | 251 } |
249 } | 252 } |