Mercurial > hg > truffle
comparison src/share/vm/services/management.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 | 6af8f3562069 |
comparison
equal
deleted
inserted
replaced
6724:36d1d483d5d6 | 6725:da91efe96a93 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2003, 2011, 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. |
27 #include "compiler/compileBroker.hpp" | 27 #include "compiler/compileBroker.hpp" |
28 #include "memory/iterator.hpp" | 28 #include "memory/iterator.hpp" |
29 #include "memory/oopFactory.hpp" | 29 #include "memory/oopFactory.hpp" |
30 #include "memory/resourceArea.hpp" | 30 #include "memory/resourceArea.hpp" |
31 #include "oops/klass.hpp" | 31 #include "oops/klass.hpp" |
32 #include "oops/klassOop.hpp" | |
33 #include "oops/objArrayKlass.hpp" | 32 #include "oops/objArrayKlass.hpp" |
34 #include "oops/oop.inline.hpp" | 33 #include "oops/oop.inline.hpp" |
35 #include "runtime/arguments.hpp" | 34 #include "runtime/arguments.hpp" |
36 #include "runtime/globals.hpp" | 35 #include "runtime/globals.hpp" |
37 #include "runtime/handles.inline.hpp" | 36 #include "runtime/handles.inline.hpp" |
57 | 56 |
58 PerfVariable* Management::_begin_vm_creation_time = NULL; | 57 PerfVariable* Management::_begin_vm_creation_time = NULL; |
59 PerfVariable* Management::_end_vm_creation_time = NULL; | 58 PerfVariable* Management::_end_vm_creation_time = NULL; |
60 PerfVariable* Management::_vm_init_done_time = NULL; | 59 PerfVariable* Management::_vm_init_done_time = NULL; |
61 | 60 |
62 klassOop Management::_sensor_klass = NULL; | 61 Klass* Management::_sensor_klass = NULL; |
63 klassOop Management::_threadInfo_klass = NULL; | 62 Klass* Management::_threadInfo_klass = NULL; |
64 klassOop Management::_memoryUsage_klass = NULL; | 63 Klass* Management::_memoryUsage_klass = NULL; |
65 klassOop Management::_memoryPoolMXBean_klass = NULL; | 64 Klass* Management::_memoryPoolMXBean_klass = NULL; |
66 klassOop Management::_memoryManagerMXBean_klass = NULL; | 65 Klass* Management::_memoryManagerMXBean_klass = NULL; |
67 klassOop Management::_garbageCollectorMXBean_klass = NULL; | 66 Klass* Management::_garbageCollectorMXBean_klass = NULL; |
68 klassOop Management::_managementFactory_klass = NULL; | 67 Klass* Management::_managementFactory_klass = NULL; |
69 klassOop Management::_garbageCollectorImpl_klass = NULL; | 68 Klass* Management::_garbageCollectorImpl_klass = NULL; |
70 klassOop Management::_gcInfo_klass = NULL; | 69 Klass* Management::_gcInfo_klass = NULL; |
71 | 70 |
72 jmmOptionalSupport Management::_optional_support = {0}; | 71 jmmOptionalSupport Management::_optional_support = {0}; |
73 TimeStamp Management::_stamp; | 72 TimeStamp Management::_stamp; |
74 | 73 |
75 void management_init() { | 74 void management_init() { |
134 HandleMark hm(THREAD); | 133 HandleMark hm(THREAD); |
135 | 134 |
136 // Load and initialize the sun.management.Agent class | 135 // Load and initialize the sun.management.Agent class |
137 // invoke startAgent method to start the management server | 136 // invoke startAgent method to start the management server |
138 Handle loader = Handle(THREAD, SystemDictionary::java_system_loader()); | 137 Handle loader = Handle(THREAD, SystemDictionary::java_system_loader()); |
139 klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::sun_management_Agent(), | 138 Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::sun_management_Agent(), |
140 loader, | 139 loader, |
141 Handle(), | 140 Handle(), |
142 true, | 141 true, |
143 CHECK); | 142 CHECK); |
144 instanceKlassHandle ik (THREAD, k); | 143 instanceKlassHandle ik (THREAD, k); |
154 | 153 |
155 void Management::get_optional_support(jmmOptionalSupport* support) { | 154 void Management::get_optional_support(jmmOptionalSupport* support) { |
156 memcpy(support, &_optional_support, sizeof(jmmOptionalSupport)); | 155 memcpy(support, &_optional_support, sizeof(jmmOptionalSupport)); |
157 } | 156 } |
158 | 157 |
159 klassOop Management::load_and_initialize_klass(Symbol* sh, TRAPS) { | 158 Klass* Management::load_and_initialize_klass(Symbol* sh, TRAPS) { |
160 klassOop k = SystemDictionary::resolve_or_fail(sh, true, CHECK_NULL); | 159 Klass* k = SystemDictionary::resolve_or_fail(sh, true, CHECK_NULL); |
161 instanceKlassHandle ik (THREAD, k); | 160 instanceKlassHandle ik (THREAD, k); |
162 if (ik->should_be_initialized()) { | 161 if (ik->should_be_initialized()) { |
163 ik->initialize(CHECK_NULL); | 162 ik->initialize(CHECK_NULL); |
164 } | 163 } |
164 // If these classes change to not be owned by the boot loader, they need | |
165 // to be walked to keep their class loader alive in oops_do. | |
166 assert(ik->class_loader() == NULL, "need to follow in oops_do"); | |
165 return ik(); | 167 return ik(); |
166 } | 168 } |
167 | 169 |
168 void Management::record_vm_startup_time(jlong begin, jlong duration) { | 170 void Management::record_vm_startup_time(jlong begin, jlong duration) { |
169 // if the performance counter is not initialized, | 171 // if the performance counter is not initialized, |
182 } | 184 } |
183 | 185 |
184 void Management::oops_do(OopClosure* f) { | 186 void Management::oops_do(OopClosure* f) { |
185 MemoryService::oops_do(f); | 187 MemoryService::oops_do(f); |
186 ThreadService::oops_do(f); | 188 ThreadService::oops_do(f); |
187 | 189 } |
188 f->do_oop((oop*) &_sensor_klass); | 190 |
189 f->do_oop((oop*) &_threadInfo_klass); | 191 Klass* Management::java_lang_management_ThreadInfo_klass(TRAPS) { |
190 f->do_oop((oop*) &_memoryUsage_klass); | |
191 f->do_oop((oop*) &_memoryPoolMXBean_klass); | |
192 f->do_oop((oop*) &_memoryManagerMXBean_klass); | |
193 f->do_oop((oop*) &_garbageCollectorMXBean_klass); | |
194 f->do_oop((oop*) &_managementFactory_klass); | |
195 f->do_oop((oop*) &_garbageCollectorImpl_klass); | |
196 f->do_oop((oop*) &_gcInfo_klass); | |
197 } | |
198 | |
199 klassOop Management::java_lang_management_ThreadInfo_klass(TRAPS) { | |
200 if (_threadInfo_klass == NULL) { | 192 if (_threadInfo_klass == NULL) { |
201 _threadInfo_klass = load_and_initialize_klass(vmSymbols::java_lang_management_ThreadInfo(), CHECK_NULL); | 193 _threadInfo_klass = load_and_initialize_klass(vmSymbols::java_lang_management_ThreadInfo(), CHECK_NULL); |
202 } | 194 } |
203 return _threadInfo_klass; | 195 return _threadInfo_klass; |
204 } | 196 } |
205 | 197 |
206 klassOop Management::java_lang_management_MemoryUsage_klass(TRAPS) { | 198 Klass* Management::java_lang_management_MemoryUsage_klass(TRAPS) { |
207 if (_memoryUsage_klass == NULL) { | 199 if (_memoryUsage_klass == NULL) { |
208 _memoryUsage_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryUsage(), CHECK_NULL); | 200 _memoryUsage_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryUsage(), CHECK_NULL); |
209 } | 201 } |
210 return _memoryUsage_klass; | 202 return _memoryUsage_klass; |
211 } | 203 } |
212 | 204 |
213 klassOop Management::java_lang_management_MemoryPoolMXBean_klass(TRAPS) { | 205 Klass* Management::java_lang_management_MemoryPoolMXBean_klass(TRAPS) { |
214 if (_memoryPoolMXBean_klass == NULL) { | 206 if (_memoryPoolMXBean_klass == NULL) { |
215 _memoryPoolMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryPoolMXBean(), CHECK_NULL); | 207 _memoryPoolMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryPoolMXBean(), CHECK_NULL); |
216 } | 208 } |
217 return _memoryPoolMXBean_klass; | 209 return _memoryPoolMXBean_klass; |
218 } | 210 } |
219 | 211 |
220 klassOop Management::java_lang_management_MemoryManagerMXBean_klass(TRAPS) { | 212 Klass* Management::java_lang_management_MemoryManagerMXBean_klass(TRAPS) { |
221 if (_memoryManagerMXBean_klass == NULL) { | 213 if (_memoryManagerMXBean_klass == NULL) { |
222 _memoryManagerMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryManagerMXBean(), CHECK_NULL); | 214 _memoryManagerMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryManagerMXBean(), CHECK_NULL); |
223 } | 215 } |
224 return _memoryManagerMXBean_klass; | 216 return _memoryManagerMXBean_klass; |
225 } | 217 } |
226 | 218 |
227 klassOop Management::java_lang_management_GarbageCollectorMXBean_klass(TRAPS) { | 219 Klass* Management::java_lang_management_GarbageCollectorMXBean_klass(TRAPS) { |
228 if (_garbageCollectorMXBean_klass == NULL) { | 220 if (_garbageCollectorMXBean_klass == NULL) { |
229 _garbageCollectorMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_GarbageCollectorMXBean(), CHECK_NULL); | 221 _garbageCollectorMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_GarbageCollectorMXBean(), CHECK_NULL); |
230 } | 222 } |
231 return _garbageCollectorMXBean_klass; | 223 return _garbageCollectorMXBean_klass; |
232 } | 224 } |
233 | 225 |
234 klassOop Management::sun_management_Sensor_klass(TRAPS) { | 226 Klass* Management::sun_management_Sensor_klass(TRAPS) { |
235 if (_sensor_klass == NULL) { | 227 if (_sensor_klass == NULL) { |
236 _sensor_klass = load_and_initialize_klass(vmSymbols::sun_management_Sensor(), CHECK_NULL); | 228 _sensor_klass = load_and_initialize_klass(vmSymbols::sun_management_Sensor(), CHECK_NULL); |
237 } | 229 } |
238 return _sensor_klass; | 230 return _sensor_klass; |
239 } | 231 } |
240 | 232 |
241 klassOop Management::sun_management_ManagementFactory_klass(TRAPS) { | 233 Klass* Management::sun_management_ManagementFactory_klass(TRAPS) { |
242 if (_managementFactory_klass == NULL) { | 234 if (_managementFactory_klass == NULL) { |
243 _managementFactory_klass = load_and_initialize_klass(vmSymbols::sun_management_ManagementFactory(), CHECK_NULL); | 235 _managementFactory_klass = load_and_initialize_klass(vmSymbols::sun_management_ManagementFactory(), CHECK_NULL); |
244 } | 236 } |
245 return _managementFactory_klass; | 237 return _managementFactory_klass; |
246 } | 238 } |
247 | 239 |
248 klassOop Management::sun_management_GarbageCollectorImpl_klass(TRAPS) { | 240 Klass* Management::sun_management_GarbageCollectorImpl_klass(TRAPS) { |
249 if (_garbageCollectorImpl_klass == NULL) { | 241 if (_garbageCollectorImpl_klass == NULL) { |
250 _garbageCollectorImpl_klass = load_and_initialize_klass(vmSymbols::sun_management_GarbageCollectorImpl(), CHECK_NULL); | 242 _garbageCollectorImpl_klass = load_and_initialize_klass(vmSymbols::sun_management_GarbageCollectorImpl(), CHECK_NULL); |
251 } | 243 } |
252 return _garbageCollectorImpl_klass; | 244 return _garbageCollectorImpl_klass; |
253 } | 245 } |
254 | 246 |
255 klassOop Management::com_sun_management_GcInfo_klass(TRAPS) { | 247 Klass* Management::com_sun_management_GcInfo_klass(TRAPS) { |
256 if (_gcInfo_klass == NULL) { | 248 if (_gcInfo_klass == NULL) { |
257 _gcInfo_klass = load_and_initialize_klass(vmSymbols::com_sun_management_GcInfo(), CHECK_NULL); | 249 _gcInfo_klass = load_and_initialize_klass(vmSymbols::com_sun_management_GcInfo(), CHECK_NULL); |
258 } | 250 } |
259 return _gcInfo_klass; | 251 return _gcInfo_klass; |
260 } | 252 } |
301 args->push_oop(stacktrace_h); | 293 args->push_oop(stacktrace_h); |
302 } | 294 } |
303 | 295 |
304 // Helper function to construct a ThreadInfo object | 296 // Helper function to construct a ThreadInfo object |
305 instanceOop Management::create_thread_info_instance(ThreadSnapshot* snapshot, TRAPS) { | 297 instanceOop Management::create_thread_info_instance(ThreadSnapshot* snapshot, TRAPS) { |
306 klassOop k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); | 298 Klass* k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); |
307 instanceKlassHandle ik (THREAD, k); | 299 instanceKlassHandle ik (THREAD, k); |
308 | 300 |
309 JavaValue result(T_VOID); | 301 JavaValue result(T_VOID); |
310 JavaCallArguments args(14); | 302 JavaCallArguments args(14); |
311 | 303 |
331 instanceOop Management::create_thread_info_instance(ThreadSnapshot* snapshot, | 323 instanceOop Management::create_thread_info_instance(ThreadSnapshot* snapshot, |
332 objArrayHandle monitors_array, | 324 objArrayHandle monitors_array, |
333 typeArrayHandle depths_array, | 325 typeArrayHandle depths_array, |
334 objArrayHandle synchronizers_array, | 326 objArrayHandle synchronizers_array, |
335 TRAPS) { | 327 TRAPS) { |
336 klassOop k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); | 328 Klass* k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); |
337 instanceKlassHandle ik (THREAD, k); | 329 instanceKlassHandle ik (THREAD, k); |
338 | 330 |
339 JavaValue result(T_VOID); | 331 JavaValue result(T_VOID); |
340 JavaCallArguments args(17); | 332 JavaCallArguments args(17); |
341 | 333 |
386 THROW_(vmSymbols::java_lang_NullPointerException(), NULL); | 378 THROW_(vmSymbols::java_lang_NullPointerException(), NULL); |
387 } | 379 } |
388 oop mgr_obj = JNIHandles::resolve(mgr); | 380 oop mgr_obj = JNIHandles::resolve(mgr); |
389 instanceHandle h(THREAD, (instanceOop) mgr_obj); | 381 instanceHandle h(THREAD, (instanceOop) mgr_obj); |
390 | 382 |
391 klassOop k = Management::java_lang_management_GarbageCollectorMXBean_klass(CHECK_NULL); | 383 Klass* k = Management::java_lang_management_GarbageCollectorMXBean_klass(CHECK_NULL); |
392 if (!h->is_a(k)) { | 384 if (!h->is_a(k)) { |
393 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), | 385 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), |
394 "the object is not an instance of java.lang.management.GarbageCollectorMXBean class", | 386 "the object is not an instance of java.lang.management.GarbageCollectorMXBean class", |
395 NULL); | 387 NULL); |
396 } | 388 } |
431 } | 423 } |
432 } | 424 } |
433 | 425 |
434 static void validate_thread_info_array(objArrayHandle infoArray_h, TRAPS) { | 426 static void validate_thread_info_array(objArrayHandle infoArray_h, TRAPS) { |
435 // check if the element of infoArray is of type ThreadInfo class | 427 // check if the element of infoArray is of type ThreadInfo class |
436 klassOop threadinfo_klass = Management::java_lang_management_ThreadInfo_klass(CHECK); | 428 Klass* threadinfo_klass = Management::java_lang_management_ThreadInfo_klass(CHECK); |
437 klassOop element_klass = objArrayKlass::cast(infoArray_h->klass())->element_klass(); | 429 Klass* element_klass = objArrayKlass::cast(infoArray_h->klass())->element_klass(); |
438 if (element_klass != threadinfo_klass) { | 430 if (element_klass != threadinfo_klass) { |
439 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), | 431 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), |
440 "infoArray element type is not ThreadInfo class"); | 432 "infoArray element type is not ThreadInfo class"); |
441 } | 433 } |
442 } | 434 } |
572 } | 564 } |
573 num_memory_pools = mgr->num_memory_pools(); | 565 num_memory_pools = mgr->num_memory_pools(); |
574 } | 566 } |
575 | 567 |
576 // Allocate the resulting MemoryPoolMXBean[] object | 568 // Allocate the resulting MemoryPoolMXBean[] object |
577 klassOop k = Management::java_lang_management_MemoryPoolMXBean_klass(CHECK_NULL); | 569 Klass* k = Management::java_lang_management_MemoryPoolMXBean_klass(CHECK_NULL); |
578 instanceKlassHandle ik (THREAD, k); | 570 instanceKlassHandle ik (THREAD, k); |
579 objArrayOop r = oopFactory::new_objArray(ik(), num_memory_pools, CHECK_NULL); | 571 objArrayOop r = oopFactory::new_objArray(ik(), num_memory_pools, CHECK_NULL); |
580 objArrayHandle poolArray(THREAD, r); | 572 objArrayHandle poolArray(THREAD, r); |
581 | 573 |
582 if (mgr == NULL) { | 574 if (mgr == NULL) { |
617 } | 609 } |
618 num_mgrs = pool->num_memory_managers(); | 610 num_mgrs = pool->num_memory_managers(); |
619 } | 611 } |
620 | 612 |
621 // Allocate the resulting MemoryManagerMXBean[] object | 613 // Allocate the resulting MemoryManagerMXBean[] object |
622 klassOop k = Management::java_lang_management_MemoryManagerMXBean_klass(CHECK_NULL); | 614 Klass* k = Management::java_lang_management_MemoryManagerMXBean_klass(CHECK_NULL); |
623 instanceKlassHandle ik (THREAD, k); | 615 instanceKlassHandle ik (THREAD, k); |
624 objArrayOop r = oopFactory::new_objArray(ik(), num_mgrs, CHECK_NULL); | 616 objArrayOop r = oopFactory::new_objArray(ik(), num_mgrs, CHECK_NULL); |
625 objArrayHandle mgrArray(THREAD, r); | 617 objArrayHandle mgrArray(THREAD, r); |
626 | 618 |
627 if (pool == NULL) { | 619 if (pool == NULL) { |
694 JVM_ENTRY(void, jmm_SetPoolSensor(JNIEnv* env, jobject obj, jmmThresholdType type, jobject sensorObj)) | 686 JVM_ENTRY(void, jmm_SetPoolSensor(JNIEnv* env, jobject obj, jmmThresholdType type, jobject sensorObj)) |
695 if (obj == NULL || sensorObj == NULL) { | 687 if (obj == NULL || sensorObj == NULL) { |
696 THROW(vmSymbols::java_lang_NullPointerException()); | 688 THROW(vmSymbols::java_lang_NullPointerException()); |
697 } | 689 } |
698 | 690 |
699 klassOop sensor_klass = Management::sun_management_Sensor_klass(CHECK); | 691 Klass* sensor_klass = Management::sun_management_Sensor_klass(CHECK); |
700 oop s = JNIHandles::resolve(sensorObj); | 692 oop s = JNIHandles::resolve(sensorObj); |
701 assert(s->is_instance(), "Sensor should be an instanceOop"); | 693 assert(s->is_instance(), "Sensor should be an instanceOop"); |
702 instanceHandle sensor_h(THREAD, (instanceOop) s); | 694 instanceHandle sensor_h(THREAD, (instanceOop) s); |
703 if (!sensor_h->is_a(sensor_klass)) { | 695 if (!sensor_h->is_a(sensor_klass)) { |
704 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), | 696 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), |
1304 } | 1296 } |
1305 | 1297 |
1306 int num_snapshots = dump_result.num_snapshots(); | 1298 int num_snapshots = dump_result.num_snapshots(); |
1307 | 1299 |
1308 // create the result ThreadInfo[] object | 1300 // create the result ThreadInfo[] object |
1309 klassOop k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); | 1301 Klass* k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); |
1310 instanceKlassHandle ik (THREAD, k); | 1302 instanceKlassHandle ik (THREAD, k); |
1311 objArrayOop r = oopFactory::new_objArray(ik(), num_snapshots, CHECK_NULL); | 1303 objArrayOop r = oopFactory::new_objArray(ik(), num_snapshots, CHECK_NULL); |
1312 objArrayHandle result_h(THREAD, r); | 1304 objArrayHandle result_h(THREAD, r); |
1313 | 1305 |
1314 int index = 0; | 1306 int index = 0; |
1721 if (names != NULL) { | 1713 if (names != NULL) { |
1722 // return the requested globals | 1714 // return the requested globals |
1723 objArrayOop ta = objArrayOop(JNIHandles::resolve_non_null(names)); | 1715 objArrayOop ta = objArrayOop(JNIHandles::resolve_non_null(names)); |
1724 objArrayHandle names_ah(THREAD, ta); | 1716 objArrayHandle names_ah(THREAD, ta); |
1725 // Make sure we have a String array | 1717 // Make sure we have a String array |
1726 klassOop element_klass = objArrayKlass::cast(names_ah->klass())->element_klass(); | 1718 Klass* element_klass = objArrayKlass::cast(names_ah->klass())->element_klass(); |
1727 if (element_klass != SystemDictionary::String_klass()) { | 1719 if (element_klass != SystemDictionary::String_klass()) { |
1728 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), | 1720 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), |
1729 "Array element type is not String class", 0); | 1721 "Array element type is not String class", 0); |
1730 } | 1722 } |
1731 | 1723 |
1875 } | 1867 } |
1876 objArrayOop na = objArrayOop(JNIHandles::resolve_non_null(names)); | 1868 objArrayOop na = objArrayOop(JNIHandles::resolve_non_null(names)); |
1877 objArrayHandle names_ah(THREAD, na); | 1869 objArrayHandle names_ah(THREAD, na); |
1878 | 1870 |
1879 // Make sure we have a String array | 1871 // Make sure we have a String array |
1880 klassOop element_klass = objArrayKlass::cast(names_ah->klass())->element_klass(); | 1872 Klass* element_klass = objArrayKlass::cast(names_ah->klass())->element_klass(); |
1881 if (element_klass != SystemDictionary::String_klass()) { | 1873 if (element_klass != SystemDictionary::String_klass()) { |
1882 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), | 1874 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), |
1883 "Array element type is not String class", 0); | 1875 "Array element type is not String class", 0); |
1884 } | 1876 } |
1885 | 1877 |
1991 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), | 1983 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), |
1992 "The length of the given MemoryUsage array does not match the number of memory pools.", 0); | 1984 "The length of the given MemoryUsage array does not match the number of memory pools.", 0); |
1993 } | 1985 } |
1994 | 1986 |
1995 // check if the element of array is of type MemoryUsage class | 1987 // check if the element of array is of type MemoryUsage class |
1996 klassOop usage_klass = Management::java_lang_management_MemoryUsage_klass(CHECK_0); | 1988 Klass* usage_klass = Management::java_lang_management_MemoryUsage_klass(CHECK_0); |
1997 klassOop element_klass = objArrayKlass::cast(array_h->klass())->element_klass(); | 1989 Klass* element_klass = objArrayKlass::cast(array_h->klass())->element_klass(); |
1998 if (element_klass != usage_klass) { | 1990 if (element_klass != usage_klass) { |
1999 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), | 1991 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), |
2000 "The element type is not MemoryUsage class", 0); | 1992 "The element type is not MemoryUsage class", 0); |
2001 } | 1993 } |
2002 | 1994 |
2140 | 2132 |
2141 objArrayOop ca = objArrayOop(JNIHandles::resolve_non_null(cmds)); | 2133 objArrayOop ca = objArrayOop(JNIHandles::resolve_non_null(cmds)); |
2142 objArrayHandle cmds_ah(THREAD, ca); | 2134 objArrayHandle cmds_ah(THREAD, ca); |
2143 | 2135 |
2144 // Make sure we have a String array | 2136 // Make sure we have a String array |
2145 klassOop element_klass = objArrayKlass::cast(cmds_ah->klass())->element_klass(); | 2137 Klass* element_klass = objArrayKlass::cast(cmds_ah->klass())->element_klass(); |
2146 if (element_klass != SystemDictionary::String_klass()) { | 2138 if (element_klass != SystemDictionary::String_klass()) { |
2147 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), | 2139 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), |
2148 "Array element type is not String class"); | 2140 "Array element type is not String class"); |
2149 } | 2141 } |
2150 | 2142 |