src/share/vm/services/management.cpp

changeset 4037
da91efe96a93
parent 3900
d2a62e0f25eb
child 4090
6af8f3562069
     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");

mercurial