1.1 --- a/src/share/vm/services/management.cpp Fri Aug 31 16:39:35 2012 -0700 1.2 +++ b/src/share/vm/services/management.cpp Sat Sep 01 13:25:18 2012 -0400 1.3 @@ -1,5 +1,5 @@ 1.4 /* 1.5 - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. 1.6 + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. 1.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1.8 * 1.9 * This code is free software; you can redistribute it and/or modify it 1.10 @@ -29,7 +29,6 @@ 1.11 #include "memory/oopFactory.hpp" 1.12 #include "memory/resourceArea.hpp" 1.13 #include "oops/klass.hpp" 1.14 -#include "oops/klassOop.hpp" 1.15 #include "oops/objArrayKlass.hpp" 1.16 #include "oops/oop.inline.hpp" 1.17 #include "runtime/arguments.hpp" 1.18 @@ -59,15 +58,15 @@ 1.19 PerfVariable* Management::_end_vm_creation_time = NULL; 1.20 PerfVariable* Management::_vm_init_done_time = NULL; 1.21 1.22 -klassOop Management::_sensor_klass = NULL; 1.23 -klassOop Management::_threadInfo_klass = NULL; 1.24 -klassOop Management::_memoryUsage_klass = NULL; 1.25 -klassOop Management::_memoryPoolMXBean_klass = NULL; 1.26 -klassOop Management::_memoryManagerMXBean_klass = NULL; 1.27 -klassOop Management::_garbageCollectorMXBean_klass = NULL; 1.28 -klassOop Management::_managementFactory_klass = NULL; 1.29 -klassOop Management::_garbageCollectorImpl_klass = NULL; 1.30 -klassOop Management::_gcInfo_klass = NULL; 1.31 +Klass* Management::_sensor_klass = NULL; 1.32 +Klass* Management::_threadInfo_klass = NULL; 1.33 +Klass* Management::_memoryUsage_klass = NULL; 1.34 +Klass* Management::_memoryPoolMXBean_klass = NULL; 1.35 +Klass* Management::_memoryManagerMXBean_klass = NULL; 1.36 +Klass* Management::_garbageCollectorMXBean_klass = NULL; 1.37 +Klass* Management::_managementFactory_klass = NULL; 1.38 +Klass* Management::_garbageCollectorImpl_klass = NULL; 1.39 +Klass* Management::_gcInfo_klass = NULL; 1.40 1.41 jmmOptionalSupport Management::_optional_support = {0}; 1.42 TimeStamp Management::_stamp; 1.43 @@ -136,7 +135,7 @@ 1.44 // Load and initialize the sun.management.Agent class 1.45 // invoke startAgent method to start the management server 1.46 Handle loader = Handle(THREAD, SystemDictionary::java_system_loader()); 1.47 - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::sun_management_Agent(), 1.48 + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::sun_management_Agent(), 1.49 loader, 1.50 Handle(), 1.51 true, 1.52 @@ -156,12 +155,15 @@ 1.53 memcpy(support, &_optional_support, sizeof(jmmOptionalSupport)); 1.54 } 1.55 1.56 -klassOop Management::load_and_initialize_klass(Symbol* sh, TRAPS) { 1.57 - klassOop k = SystemDictionary::resolve_or_fail(sh, true, CHECK_NULL); 1.58 +Klass* Management::load_and_initialize_klass(Symbol* sh, TRAPS) { 1.59 + Klass* k = SystemDictionary::resolve_or_fail(sh, true, CHECK_NULL); 1.60 instanceKlassHandle ik (THREAD, k); 1.61 if (ik->should_be_initialized()) { 1.62 ik->initialize(CHECK_NULL); 1.63 } 1.64 + // If these classes change to not be owned by the boot loader, they need 1.65 + // to be walked to keep their class loader alive in oops_do. 1.66 + assert(ik->class_loader() == NULL, "need to follow in oops_do"); 1.67 return ik(); 1.68 } 1.69 1.70 @@ -184,75 +186,65 @@ 1.71 void Management::oops_do(OopClosure* f) { 1.72 MemoryService::oops_do(f); 1.73 ThreadService::oops_do(f); 1.74 - 1.75 - f->do_oop((oop*) &_sensor_klass); 1.76 - f->do_oop((oop*) &_threadInfo_klass); 1.77 - f->do_oop((oop*) &_memoryUsage_klass); 1.78 - f->do_oop((oop*) &_memoryPoolMXBean_klass); 1.79 - f->do_oop((oop*) &_memoryManagerMXBean_klass); 1.80 - f->do_oop((oop*) &_garbageCollectorMXBean_klass); 1.81 - f->do_oop((oop*) &_managementFactory_klass); 1.82 - f->do_oop((oop*) &_garbageCollectorImpl_klass); 1.83 - f->do_oop((oop*) &_gcInfo_klass); 1.84 } 1.85 1.86 -klassOop Management::java_lang_management_ThreadInfo_klass(TRAPS) { 1.87 +Klass* Management::java_lang_management_ThreadInfo_klass(TRAPS) { 1.88 if (_threadInfo_klass == NULL) { 1.89 _threadInfo_klass = load_and_initialize_klass(vmSymbols::java_lang_management_ThreadInfo(), CHECK_NULL); 1.90 } 1.91 return _threadInfo_klass; 1.92 } 1.93 1.94 -klassOop Management::java_lang_management_MemoryUsage_klass(TRAPS) { 1.95 +Klass* Management::java_lang_management_MemoryUsage_klass(TRAPS) { 1.96 if (_memoryUsage_klass == NULL) { 1.97 _memoryUsage_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryUsage(), CHECK_NULL); 1.98 } 1.99 return _memoryUsage_klass; 1.100 } 1.101 1.102 -klassOop Management::java_lang_management_MemoryPoolMXBean_klass(TRAPS) { 1.103 +Klass* Management::java_lang_management_MemoryPoolMXBean_klass(TRAPS) { 1.104 if (_memoryPoolMXBean_klass == NULL) { 1.105 _memoryPoolMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryPoolMXBean(), CHECK_NULL); 1.106 } 1.107 return _memoryPoolMXBean_klass; 1.108 } 1.109 1.110 -klassOop Management::java_lang_management_MemoryManagerMXBean_klass(TRAPS) { 1.111 +Klass* Management::java_lang_management_MemoryManagerMXBean_klass(TRAPS) { 1.112 if (_memoryManagerMXBean_klass == NULL) { 1.113 _memoryManagerMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryManagerMXBean(), CHECK_NULL); 1.114 } 1.115 return _memoryManagerMXBean_klass; 1.116 } 1.117 1.118 -klassOop Management::java_lang_management_GarbageCollectorMXBean_klass(TRAPS) { 1.119 +Klass* Management::java_lang_management_GarbageCollectorMXBean_klass(TRAPS) { 1.120 if (_garbageCollectorMXBean_klass == NULL) { 1.121 _garbageCollectorMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_GarbageCollectorMXBean(), CHECK_NULL); 1.122 } 1.123 return _garbageCollectorMXBean_klass; 1.124 } 1.125 1.126 -klassOop Management::sun_management_Sensor_klass(TRAPS) { 1.127 +Klass* Management::sun_management_Sensor_klass(TRAPS) { 1.128 if (_sensor_klass == NULL) { 1.129 _sensor_klass = load_and_initialize_klass(vmSymbols::sun_management_Sensor(), CHECK_NULL); 1.130 } 1.131 return _sensor_klass; 1.132 } 1.133 1.134 -klassOop Management::sun_management_ManagementFactory_klass(TRAPS) { 1.135 +Klass* Management::sun_management_ManagementFactory_klass(TRAPS) { 1.136 if (_managementFactory_klass == NULL) { 1.137 _managementFactory_klass = load_and_initialize_klass(vmSymbols::sun_management_ManagementFactory(), CHECK_NULL); 1.138 } 1.139 return _managementFactory_klass; 1.140 } 1.141 1.142 -klassOop Management::sun_management_GarbageCollectorImpl_klass(TRAPS) { 1.143 +Klass* Management::sun_management_GarbageCollectorImpl_klass(TRAPS) { 1.144 if (_garbageCollectorImpl_klass == NULL) { 1.145 _garbageCollectorImpl_klass = load_and_initialize_klass(vmSymbols::sun_management_GarbageCollectorImpl(), CHECK_NULL); 1.146 } 1.147 return _garbageCollectorImpl_klass; 1.148 } 1.149 1.150 -klassOop Management::com_sun_management_GcInfo_klass(TRAPS) { 1.151 +Klass* Management::com_sun_management_GcInfo_klass(TRAPS) { 1.152 if (_gcInfo_klass == NULL) { 1.153 _gcInfo_klass = load_and_initialize_klass(vmSymbols::com_sun_management_GcInfo(), CHECK_NULL); 1.154 } 1.155 @@ -303,7 +295,7 @@ 1.156 1.157 // Helper function to construct a ThreadInfo object 1.158 instanceOop Management::create_thread_info_instance(ThreadSnapshot* snapshot, TRAPS) { 1.159 - klassOop k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); 1.160 + Klass* k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); 1.161 instanceKlassHandle ik (THREAD, k); 1.162 1.163 JavaValue result(T_VOID); 1.164 @@ -333,7 +325,7 @@ 1.165 typeArrayHandle depths_array, 1.166 objArrayHandle synchronizers_array, 1.167 TRAPS) { 1.168 - klassOop k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); 1.169 + Klass* k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); 1.170 instanceKlassHandle ik (THREAD, k); 1.171 1.172 JavaValue result(T_VOID); 1.173 @@ -388,7 +380,7 @@ 1.174 oop mgr_obj = JNIHandles::resolve(mgr); 1.175 instanceHandle h(THREAD, (instanceOop) mgr_obj); 1.176 1.177 - klassOop k = Management::java_lang_management_GarbageCollectorMXBean_klass(CHECK_NULL); 1.178 + Klass* k = Management::java_lang_management_GarbageCollectorMXBean_klass(CHECK_NULL); 1.179 if (!h->is_a(k)) { 1.180 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), 1.181 "the object is not an instance of java.lang.management.GarbageCollectorMXBean class", 1.182 @@ -433,8 +425,8 @@ 1.183 1.184 static void validate_thread_info_array(objArrayHandle infoArray_h, TRAPS) { 1.185 // check if the element of infoArray is of type ThreadInfo class 1.186 - klassOop threadinfo_klass = Management::java_lang_management_ThreadInfo_klass(CHECK); 1.187 - klassOop element_klass = objArrayKlass::cast(infoArray_h->klass())->element_klass(); 1.188 + Klass* threadinfo_klass = Management::java_lang_management_ThreadInfo_klass(CHECK); 1.189 + Klass* element_klass = objArrayKlass::cast(infoArray_h->klass())->element_klass(); 1.190 if (element_klass != threadinfo_klass) { 1.191 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), 1.192 "infoArray element type is not ThreadInfo class"); 1.193 @@ -574,7 +566,7 @@ 1.194 } 1.195 1.196 // Allocate the resulting MemoryPoolMXBean[] object 1.197 - klassOop k = Management::java_lang_management_MemoryPoolMXBean_klass(CHECK_NULL); 1.198 + Klass* k = Management::java_lang_management_MemoryPoolMXBean_klass(CHECK_NULL); 1.199 instanceKlassHandle ik (THREAD, k); 1.200 objArrayOop r = oopFactory::new_objArray(ik(), num_memory_pools, CHECK_NULL); 1.201 objArrayHandle poolArray(THREAD, r); 1.202 @@ -619,7 +611,7 @@ 1.203 } 1.204 1.205 // Allocate the resulting MemoryManagerMXBean[] object 1.206 - klassOop k = Management::java_lang_management_MemoryManagerMXBean_klass(CHECK_NULL); 1.207 + Klass* k = Management::java_lang_management_MemoryManagerMXBean_klass(CHECK_NULL); 1.208 instanceKlassHandle ik (THREAD, k); 1.209 objArrayOop r = oopFactory::new_objArray(ik(), num_mgrs, CHECK_NULL); 1.210 objArrayHandle mgrArray(THREAD, r); 1.211 @@ -696,7 +688,7 @@ 1.212 THROW(vmSymbols::java_lang_NullPointerException()); 1.213 } 1.214 1.215 - klassOop sensor_klass = Management::sun_management_Sensor_klass(CHECK); 1.216 + Klass* sensor_klass = Management::sun_management_Sensor_klass(CHECK); 1.217 oop s = JNIHandles::resolve(sensorObj); 1.218 assert(s->is_instance(), "Sensor should be an instanceOop"); 1.219 instanceHandle sensor_h(THREAD, (instanceOop) s); 1.220 @@ -1306,7 +1298,7 @@ 1.221 int num_snapshots = dump_result.num_snapshots(); 1.222 1.223 // create the result ThreadInfo[] object 1.224 - klassOop k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); 1.225 + Klass* k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); 1.226 instanceKlassHandle ik (THREAD, k); 1.227 objArrayOop r = oopFactory::new_objArray(ik(), num_snapshots, CHECK_NULL); 1.228 objArrayHandle result_h(THREAD, r); 1.229 @@ -1723,7 +1715,7 @@ 1.230 objArrayOop ta = objArrayOop(JNIHandles::resolve_non_null(names)); 1.231 objArrayHandle names_ah(THREAD, ta); 1.232 // Make sure we have a String array 1.233 - klassOop element_klass = objArrayKlass::cast(names_ah->klass())->element_klass(); 1.234 + Klass* element_klass = objArrayKlass::cast(names_ah->klass())->element_klass(); 1.235 if (element_klass != SystemDictionary::String_klass()) { 1.236 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), 1.237 "Array element type is not String class", 0); 1.238 @@ -1877,7 +1869,7 @@ 1.239 objArrayHandle names_ah(THREAD, na); 1.240 1.241 // Make sure we have a String array 1.242 - klassOop element_klass = objArrayKlass::cast(names_ah->klass())->element_klass(); 1.243 + Klass* element_klass = objArrayKlass::cast(names_ah->klass())->element_klass(); 1.244 if (element_klass != SystemDictionary::String_klass()) { 1.245 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), 1.246 "Array element type is not String class", 0); 1.247 @@ -1993,8 +1985,8 @@ 1.248 } 1.249 1.250 // check if the element of array is of type MemoryUsage class 1.251 - klassOop usage_klass = Management::java_lang_management_MemoryUsage_klass(CHECK_0); 1.252 - klassOop element_klass = objArrayKlass::cast(array_h->klass())->element_klass(); 1.253 + Klass* usage_klass = Management::java_lang_management_MemoryUsage_klass(CHECK_0); 1.254 + Klass* element_klass = objArrayKlass::cast(array_h->klass())->element_klass(); 1.255 if (element_klass != usage_klass) { 1.256 THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), 1.257 "The element type is not MemoryUsage class", 0); 1.258 @@ -2142,7 +2134,7 @@ 1.259 objArrayHandle cmds_ah(THREAD, ca); 1.260 1.261 // Make sure we have a String array 1.262 - klassOop element_klass = objArrayKlass::cast(cmds_ah->klass())->element_klass(); 1.263 + Klass* element_klass = objArrayKlass::cast(cmds_ah->klass())->element_klass(); 1.264 if (element_klass != SystemDictionary::String_klass()) { 1.265 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), 1.266 "Array element type is not String class");