Merge

Fri, 16 Nov 2012 09:19:12 -0500

author
coleenp
date
Fri, 16 Nov 2012 09:19:12 -0500
changeset 4280
80e866b1d053
parent 4269
6b6ddf8c4329
parent 4279
24e193d2a007
child 4281
cfc5309f03b7

Merge

src/share/vm/ci/ciEnv.cpp file | annotate | diff | comparison | revisions
src/share/vm/classfile/javaClasses.cpp file | annotate | diff | comparison | revisions
src/share/vm/classfile/javaClasses.hpp file | annotate | diff | comparison | revisions
src/share/vm/code/dependencies.cpp file | annotate | diff | comparison | revisions
src/share/vm/interpreter/interpreterRuntime.cpp file | annotate | diff | comparison | revisions
src/share/vm/memory/universe.cpp file | annotate | diff | comparison | revisions
src/share/vm/oops/cpCache.cpp file | annotate | diff | comparison | revisions
src/share/vm/oops/instanceKlass.cpp file | annotate | diff | comparison | revisions
src/share/vm/prims/jni.cpp file | annotate | diff | comparison | revisions
src/share/vm/prims/jvmtiExport.cpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/globals.hpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/os.cpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/thread.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/c1/c1_Runtime1.cpp	Fri Nov 16 09:59:08 2012 +0100
     1.2 +++ b/src/share/vm/c1/c1_Runtime1.cpp	Fri Nov 16 09:19:12 2012 -0500
     1.3 @@ -374,7 +374,7 @@
     1.4  
     1.5  JRT_ENTRY(void, Runtime1::throw_array_store_exception(JavaThread* thread, oopDesc* obj))
     1.6    ResourceMark rm(thread);
     1.7 -  const char* klass_name = Klass::cast(obj->klass())->external_name();
     1.8 +  const char* klass_name = obj->klass()->external_name();
     1.9    SharedRuntime::throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_ArrayStoreException(), klass_name);
    1.10  JRT_END
    1.11  
    1.12 @@ -631,7 +631,7 @@
    1.13    NOT_PRODUCT(_throw_class_cast_exception_count++;)
    1.14    ResourceMark rm(thread);
    1.15    char* message = SharedRuntime::generate_class_cast_message(
    1.16 -    thread, Klass::cast(object->klass())->external_name());
    1.17 +    thread, object->klass()->external_name());
    1.18    SharedRuntime::throw_and_post_jvmti_exception(
    1.19      thread, vmSymbols::java_lang_ClassCastException(), message);
    1.20  JRT_END
    1.21 @@ -876,7 +876,7 @@
    1.22        case Bytecodes::_anewarray:
    1.23          { Bytecode_anewarray anew(caller_method(), caller_method->bcp_from(bci));
    1.24            Klass* ek = caller_method->constants()->klass_at(anew.index(), CHECK);
    1.25 -          k = Klass::cast(ek)->array_klass(CHECK);
    1.26 +          k = ek->array_klass(CHECK);
    1.27          }
    1.28          break;
    1.29        case Bytecodes::_ldc:
    1.30 @@ -1236,7 +1236,7 @@
    1.31    } else {
    1.32      Klass* bound = ObjArrayKlass::cast(dst->klass())->element_klass();
    1.33      Klass* stype = ObjArrayKlass::cast(src->klass())->element_klass();
    1.34 -    if (stype == bound || Klass::cast(stype)->is_subtype_of(bound)) {
    1.35 +    if (stype == bound || stype->is_subtype_of(bound)) {
    1.36        // Elements are guaranteed to be subtypes, so no check necessary
    1.37        bs->write_ref_array_pre(dst_addr, length);
    1.38        Copy::conjoint_oops_atomic(src_addr, dst_addr, length);
     2.1 --- a/src/share/vm/ci/ciEnv.cpp	Fri Nov 16 09:59:08 2012 +0100
     2.2 +++ b/src/share/vm/ci/ciEnv.cpp	Fri Nov 16 09:19:12 2012 -0500
     2.3 @@ -427,7 +427,7 @@
     2.4      for (int i = cpool->length() - 1; i >= 1; i--) {
     2.5        if (cpool->tag_at(i).is_klass()) {
     2.6          Klass* kls = cpool->resolved_klass_at(i);
     2.7 -        if (Klass::cast(kls)->name() == sym) {
     2.8 +        if (kls->name() == sym) {
     2.9            found_klass = KlassHandle(THREAD, kls);
    2.10            break;
    2.11          }
     3.1 --- a/src/share/vm/ci/ciType.cpp	Fri Nov 16 09:59:08 2012 +0100
     3.2 +++ b/src/share/vm/ci/ciType.cpp	Fri Nov 16 09:19:12 2012 -0500
     3.3 @@ -45,7 +45,7 @@
     3.4  }
     3.5  
     3.6  ciType::ciType(KlassHandle k) : ciMetadata(k()) {
     3.7 -  _basic_type = Klass::cast(k())->oop_is_array() ? T_ARRAY : T_OBJECT;
     3.8 +  _basic_type = k()->oop_is_array() ? T_ARRAY : T_OBJECT;
     3.9  }
    3.10  
    3.11  
     4.1 --- a/src/share/vm/classfile/classFileParser.cpp	Fri Nov 16 09:59:08 2012 +0100
     4.2 +++ b/src/share/vm/classfile/classFileParser.cpp	Fri Nov 16 09:19:12 2012 -0500
     4.3 @@ -824,7 +824,7 @@
     4.4        interf = KlassHandle(THREAD, k);
     4.5      }
     4.6  
     4.7 -    if (!Klass::cast(interf())->is_interface()) {
     4.8 +    if (!interf()->is_interface()) {
     4.9        THROW_MSG_(vmSymbols::java_lang_IncompatibleClassChangeError(), "Implementing class", NULL);
    4.10      }
    4.11      if (InstanceKlass::cast(interf())->has_default_methods()) {
    4.12 @@ -3831,7 +3831,7 @@
    4.13      if (TraceClassResolution) {
    4.14        ResourceMark rm;
    4.15        // print out the superclass.
    4.16 -      const char * from = Klass::cast(this_klass())->external_name();
    4.17 +      const char * from = this_klass()->external_name();
    4.18        if (this_klass->java_super() != NULL) {
    4.19          tty->print("RESOLVE %s %s (super)\n", from, InstanceKlass::cast(this_klass->java_super())->external_name());
    4.20        }
    4.21 @@ -3982,13 +3982,13 @@
    4.22      // java.lang.Object has empty default constructor
    4.23      k->set_has_vanilla_constructor();
    4.24    } else {
    4.25 -    if (Klass::cast(super)->has_vanilla_constructor() &&
    4.26 +    if (super->has_vanilla_constructor() &&
    4.27          _has_vanilla_constructor) {
    4.28        k->set_has_vanilla_constructor();
    4.29      }
    4.30  #ifdef ASSERT
    4.31      bool v = false;
    4.32 -    if (Klass::cast(super)->has_vanilla_constructor()) {
    4.33 +    if (super->has_vanilla_constructor()) {
    4.34        Method* constructor = k->find_method(vmSymbols::object_initializer_name(
    4.35  ), vmSymbols::void_method_signature());
    4.36        if (constructor != NULL && constructor->is_vanilla_constructor()) {
    4.37 @@ -4130,7 +4130,7 @@
    4.38    int lng = local_interfaces->length();
    4.39    for (int i = lng - 1; i >= 0; i--) {
    4.40      Klass* k = local_interfaces->at(i);
    4.41 -    assert (k != NULL && Klass::cast(k)->is_interface(), "invalid interface");
    4.42 +    assert (k != NULL && k->is_interface(), "invalid interface");
    4.43      if (!Reflection::verify_class_access(this_klass(), k, false)) {
    4.44        ResourceMark rm(THREAD);
    4.45        Exceptions::fthrow(
     5.1 --- a/src/share/vm/classfile/dictionary.cpp	Fri Nov 16 09:59:08 2012 +0100
     5.2 +++ b/src/share/vm/classfile/dictionary.cpp	Fri Nov 16 09:19:12 2012 -0500
     5.3 @@ -346,7 +346,7 @@
     5.4                             KlassHandle obj) {
     5.5    assert_locked_or_safepoint(SystemDictionary_lock);
     5.6    assert(obj() != NULL, "adding NULL obj");
     5.7 -  assert(Klass::cast(obj())->name() == class_name, "sanity check on name");
     5.8 +  assert(obj()->name() == class_name, "sanity check on name");
     5.9  
    5.10    unsigned int hash = compute_hash(class_name, loader_data);
    5.11    int index = hash_to_index(hash);
    5.12 @@ -553,7 +553,7 @@
    5.13        bool is_defining_class =
    5.14           (loader_data == InstanceKlass::cast(e)->class_loader_data());
    5.15        tty->print("%s%s", is_defining_class ? " " : "^",
    5.16 -                   Klass::cast(e)->external_name());
    5.17 +                   e->external_name());
    5.18  
    5.19          tty->print(", loader ");
    5.20        loader_data->print_value();
    5.21 @@ -575,7 +575,7 @@
    5.22                            probe = probe->next()) {
    5.23        Klass* e = probe->klass();
    5.24        ClassLoaderData* loader_data = probe->loader_data();
    5.25 -      guarantee(Klass::cast(e)->oop_is_instance(),
    5.26 +      guarantee(e->oop_is_instance(),
    5.27                                "Verify of system dictionary failed");
    5.28        // class loader must be present;  a null class loader is the
    5.29        // boostrap loader
     6.1 --- a/src/share/vm/classfile/javaClasses.cpp	Fri Nov 16 09:59:08 2012 +0100
     6.2 +++ b/src/share/vm/classfile/javaClasses.cpp	Fri Nov 16 09:19:12 2012 -0500
     6.3 @@ -561,7 +561,7 @@
     6.4          assert(k->oop_is_objArray(), "Must be");
     6.5          Klass* element_klass = ObjArrayKlass::cast(k())->element_klass();
     6.6          assert(element_klass != NULL, "Must have an element klass");
     6.7 -          comp_mirror = Klass::cast(element_klass)->java_mirror();
     6.8 +          comp_mirror = element_klass->java_mirror();
     6.9        }
    6.10        assert(comp_mirror.not_null(), "must have a mirror");
    6.11  
    6.12 @@ -644,8 +644,8 @@
    6.13      name = vmSymbols::type_signature(primitive_type(java_class));
    6.14    } else {
    6.15      Klass* k = as_Klass(java_class);
    6.16 -    is_instance = Klass::cast(k)->oop_is_instance();
    6.17 -    name = Klass::cast(k)->name();
    6.18 +    is_instance = k->oop_is_instance();
    6.19 +    name = k->name();
    6.20    }
    6.21    if (name == NULL) {
    6.22      st->print("<null>");
    6.23 @@ -667,12 +667,12 @@
    6.24      name->increment_refcount();
    6.25    } else {
    6.26      Klass* k = as_Klass(java_class);
    6.27 -    if (!Klass::cast(k)->oop_is_instance()) {
    6.28 -      name = Klass::cast(k)->name();
    6.29 +    if (!k->oop_is_instance()) {
    6.30 +      name = k->name();
    6.31        name->increment_refcount();
    6.32      } else {
    6.33        ResourceMark rm;
    6.34 -      const char* sigstr = Klass::cast(k)->signature_name();
    6.35 +      const char* sigstr = k->signature_name();
    6.36        int         siglen = (int) strlen(sigstr);
    6.37        if (!intern_if_not_found) {
    6.38          name = SymbolTable::probe(sigstr, siglen);
    6.39 @@ -687,13 +687,13 @@
    6.40  
    6.41  Klass* java_lang_Class::array_klass(oop java_class) {
    6.42    Klass* k = ((Klass*)java_class->metadata_field(_array_klass_offset));
    6.43 -  assert(k == NULL || k->is_klass() && Klass::cast(k)->oop_is_array(), "should be array klass");
    6.44 +  assert(k == NULL || k->is_klass() && k->oop_is_array(), "should be array klass");
    6.45    return k;
    6.46  }
    6.47  
    6.48  
    6.49  void java_lang_Class::set_array_klass(oop java_class, Klass* klass) {
    6.50 -  assert(klass->is_klass() && Klass::cast(klass)->oop_is_array(), "should be array klass");
    6.51 +  assert(klass->is_klass() && klass->oop_is_array(), "should be array klass");
    6.52    java_class->metadata_field_put(_array_klass_offset, klass);
    6.53  }
    6.54  
     7.1 --- a/src/share/vm/classfile/javaClasses.hpp	Fri Nov 16 09:59:08 2012 +0100
     7.2 +++ b/src/share/vm/classfile/javaClasses.hpp	Fri Nov 16 09:19:12 2012 -0500
     7.3 @@ -914,7 +914,7 @@
     7.4  
     7.5    // Testers
     7.6    static bool is_subclass(Klass* klass) {
     7.7 -    return Klass::cast(klass)->is_subclass_of(SystemDictionary::MethodHandle_klass());
     7.8 +    return klass->is_subclass_of(SystemDictionary::MethodHandle_klass());
     7.9    }
    7.10    static bool is_instance(oop obj) {
    7.11      return obj != NULL && is_subclass(obj->klass());
    7.12 @@ -944,7 +944,7 @@
    7.13    // Testers
    7.14    static bool is_subclass(Klass* klass) {
    7.15      return SystemDictionary::LambdaForm_klass() != NULL &&
    7.16 -      Klass::cast(klass)->is_subclass_of(SystemDictionary::LambdaForm_klass());
    7.17 +      klass->is_subclass_of(SystemDictionary::LambdaForm_klass());
    7.18    }
    7.19    static bool is_instance(oop obj) {
    7.20      return obj != NULL && is_subclass(obj->klass());
    7.21 @@ -1006,7 +1006,7 @@
    7.22  
    7.23    // Testers
    7.24    static bool is_subclass(Klass* klass) {
    7.25 -    return Klass::cast(klass)->is_subclass_of(SystemDictionary::MemberName_klass());
    7.26 +    return klass->is_subclass_of(SystemDictionary::MemberName_klass());
    7.27    }
    7.28    static bool is_instance(oop obj) {
    7.29      return obj != NULL && is_subclass(obj->klass());
    7.30 @@ -1092,7 +1092,7 @@
    7.31  
    7.32    // Testers
    7.33    static bool is_subclass(Klass* klass) {
    7.34 -    return Klass::cast(klass)->is_subclass_of(SystemDictionary::CallSite_klass());
    7.35 +    return klass->is_subclass_of(SystemDictionary::CallSite_klass());
    7.36    }
    7.37    static bool is_instance(oop obj) {
    7.38      return obj != NULL && is_subclass(obj->klass());
    7.39 @@ -1162,7 +1162,7 @@
    7.40  
    7.41    // Testers
    7.42    static bool is_subclass(Klass* klass) {
    7.43 -    return Klass::cast(klass)->is_subclass_of(SystemDictionary::ClassLoader_klass());
    7.44 +    return klass->is_subclass_of(SystemDictionary::ClassLoader_klass());
    7.45    }
    7.46    static bool is_instance(oop obj) {
    7.47      return obj != NULL && is_subclass(obj->klass());
     8.1 --- a/src/share/vm/classfile/loaderConstraints.cpp	Fri Nov 16 09:59:08 2012 +0100
     8.2 +++ b/src/share/vm/classfile/loaderConstraints.cpp	Fri Nov 16 09:19:12 2012 -0500
     8.3 @@ -320,7 +320,7 @@
     8.4                                                         Handle loader) {
     8.5    LoaderConstraintEntry *p = *(find_loader_constraint(name, loader));
     8.6    if (p != NULL && p->klass() != NULL) {
     8.7 -    if (Klass::cast(p->klass())->oop_is_instance() && !InstanceKlass::cast(p->klass())->is_loaded()) {
     8.8 +    if (p->klass()->oop_is_instance() && !InstanceKlass::cast(p->klass())->is_loaded()) {
     8.9        // Only return fully loaded classes.  Classes found through the
    8.10        // constraints might still be in the process of loading.
    8.11        return NULL;
     9.1 --- a/src/share/vm/classfile/placeholders.cpp	Fri Nov 16 09:59:08 2012 +0100
     9.2 +++ b/src/share/vm/classfile/placeholders.cpp	Fri Nov 16 09:19:12 2012 -0500
     9.3 @@ -45,7 +45,7 @@
     9.4    entry->set_loadInstanceThreadQ(NULL);
     9.5    entry->set_defineThreadQ(NULL);
     9.6    entry->set_definer(NULL);
     9.7 -  entry->set_instanceKlass(NULL);
     9.8 +  entry->set_instance_klass(NULL);
     9.9    return entry;
    9.10  }
    9.11  
    9.12 @@ -188,7 +188,7 @@
    9.13  void PlaceholderEntry::classes_do(KlassClosure* closure) {
    9.14    assert(klassname() != NULL, "should have a non-null klass");
    9.15    if (_instanceKlass != NULL) {
    9.16 -    closure->do_klass(InstanceKlass());
    9.17 +    closure->do_klass(instance_klass());
    9.18    }
    9.19  }
    9.20  
    9.21 @@ -220,9 +220,9 @@
    9.22      tty->print(", definer ");
    9.23      definer()->print_value();
    9.24    }
    9.25 -  if (InstanceKlass() != NULL) {
    9.26 +  if (instance_klass() != NULL) {
    9.27      tty->print(", InstanceKlass ");
    9.28 -    InstanceKlass()->print_value();
    9.29 +    instance_klass()->print_value();
    9.30    }
    9.31    tty->print("\n");
    9.32    tty->print("loadInstanceThreadQ threads:");
    9.33 @@ -241,9 +241,9 @@
    9.34    guarantee(loader_data() != NULL, "Must have been setup.");
    9.35    guarantee(loader_data()->class_loader() == NULL || loader_data()->class_loader()->is_instance(),
    9.36              "checking type of _loader");
    9.37 -  guarantee(InstanceKlass() == NULL
    9.38 -            || Klass::cast(InstanceKlass())->oop_is_instance(),
    9.39 -            "checking type of InstanceKlass result");
    9.40 +  guarantee(instance_klass() == NULL
    9.41 +            || instance_klass()->oop_is_instance(),
    9.42 +            "checking type of instance_klass result");
    9.43  }
    9.44  
    9.45  void PlaceholderTable::verify() {
    10.1 --- a/src/share/vm/classfile/placeholders.hpp	Fri Nov 16 09:59:08 2012 +0100
    10.2 +++ b/src/share/vm/classfile/placeholders.hpp	Fri Nov 16 09:19:12 2012 -0500
    10.3 @@ -191,8 +191,8 @@
    10.4    Thread*            definer()             const {return _definer; }
    10.5    void               set_definer(Thread* definer) { _definer = definer; }
    10.6  
    10.7 -  Klass*             InstanceKlass()     const {return _instanceKlass; }
    10.8 -  void               set_instanceKlass(Klass* InstanceKlass) { _instanceKlass = InstanceKlass; }
    10.9 +  Klass*             instance_klass()      const {return _instanceKlass; }
   10.10 +  void               set_instance_klass(Klass* ik) { _instanceKlass = ik; }
   10.11  
   10.12    SeenThread*        superThreadQ()        const { return _superThreadQ; }
   10.13    void               set_superThreadQ(SeenThread* SeenThread) { _superThreadQ = SeenThread; }
    11.1 --- a/src/share/vm/classfile/symbolTable.hpp	Fri Nov 16 09:59:08 2012 +0100
    11.2 +++ b/src/share/vm/classfile/symbolTable.hpp	Fri Nov 16 09:19:12 2012 -0500
    11.3 @@ -262,19 +262,14 @@
    11.4    // The string table
    11.5    static StringTable* the_table() { return _the_table; }
    11.6  
    11.7 +  // Size of one bucket in the string table.  Used when checking for rollover.
    11.8 +  static uint bucket_size() { return sizeof(HashtableBucket<mtSymbol>); }
    11.9 +
   11.10    static void create_table() {
   11.11      assert(_the_table == NULL, "One string table allowed.");
   11.12      _the_table = new StringTable();
   11.13    }
   11.14  
   11.15 -  static void create_table(HashtableBucket<mtSymbol>* t, int length,
   11.16 -                           int number_of_entries) {
   11.17 -    assert(_the_table == NULL, "One string table allowed.");
   11.18 -    assert((size_t)length == StringTableSize * sizeof(HashtableBucket<mtSymbol>),
   11.19 -           "bad shared string size.");
   11.20 -    _the_table = new StringTable(t, number_of_entries);
   11.21 -  }
   11.22 -
   11.23    // GC support
   11.24    //   Delete pointers to otherwise-unreachable objects.
   11.25    static void unlink(BoolObjectClosure* cl);
    12.1 --- a/src/share/vm/classfile/systemDictionary.cpp	Fri Nov 16 09:59:08 2012 +0100
    12.2 +++ b/src/share/vm/classfile/systemDictionary.cpp	Fri Nov 16 09:19:12 2012 -0500
    12.3 @@ -240,7 +240,7 @@
    12.4                                                           protection_domain,
    12.5                                                           CHECK_NULL);
    12.6      if (k != NULL) {
    12.7 -      k = Klass::cast(k)->array_klass(fd.dimension(), CHECK_NULL);
    12.8 +      k = k->array_klass(fd.dimension(), CHECK_NULL);
    12.9      }
   12.10    } else {
   12.11      k = Universe::typeArrayKlassObj(t);
   12.12 @@ -328,8 +328,8 @@
   12.13      if ((childk != NULL ) && (is_superclass) &&
   12.14         ((quicksuperk = InstanceKlass::cast(childk)->super()) != NULL) &&
   12.15  
   12.16 -         ((Klass::cast(quicksuperk)->name() == class_name) &&
   12.17 -            (Klass::cast(quicksuperk)->class_loader()  == class_loader()))) {
   12.18 +         ((quicksuperk->name() == class_name) &&
   12.19 +            (quicksuperk->class_loader()  == class_loader()))) {
   12.20             return quicksuperk;
   12.21      } else {
   12.22        PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, child_name, loader_data);
   12.23 @@ -928,7 +928,7 @@
   12.24        k = SystemDictionary::find(fd.object_key(), class_loader, protection_domain, THREAD);
   12.25      }
   12.26      if (k != NULL) {
   12.27 -      k = Klass::cast(k)->array_klass_or_null(fd.dimension());
   12.28 +      k = k->array_klass_or_null(fd.dimension());
   12.29      }
   12.30    } else {
   12.31      k = find(class_name, class_loader, protection_domain, THREAD);
   12.32 @@ -1537,7 +1537,7 @@
   12.33      // Only special cases allow parallel defines and can use other thread's results
   12.34      // Other cases fall through, and may run into duplicate defines
   12.35      // caught by finding an entry in the SystemDictionary
   12.36 -    if ((UnsyncloadClass || is_parallelDefine(class_loader)) && (probe->InstanceKlass() != NULL)) {
   12.37 +    if ((UnsyncloadClass || is_parallelDefine(class_loader)) && (probe->instance_klass() != NULL)) {
   12.38          probe->remove_seen_thread(THREAD, PlaceholderTable::DEFINE_CLASS);
   12.39          placeholders()->find_and_remove(p_index, p_hash, name_h, loader_data, THREAD);
   12.40          SystemDictionary_lock->notify_all();
   12.41 @@ -1545,7 +1545,7 @@
   12.42          Klass* check = find_class(d_index, d_hash, name_h, loader_data);
   12.43          assert(check != NULL, "definer missed recording success");
   12.44  #endif
   12.45 -        return(instanceKlassHandle(THREAD, probe->InstanceKlass()));
   12.46 +        return(instanceKlassHandle(THREAD, probe->instance_klass()));
   12.47      } else {
   12.48        // This thread will define the class (even if earlier thread tried and had an error)
   12.49        probe->set_definer(THREAD);
   12.50 @@ -1566,7 +1566,7 @@
   12.51          linkage_exception = Handle(THREAD,PENDING_EXCEPTION);
   12.52          CLEAR_PENDING_EXCEPTION;
   12.53        } else {
   12.54 -        probe->set_instanceKlass(k());
   12.55 +        probe->set_instance_klass(k());
   12.56        }
   12.57        probe->set_definer(NULL);
   12.58        probe->remove_seen_thread(THREAD, PlaceholderTable::DEFINE_CLASS);
   12.59 @@ -2149,7 +2149,7 @@
   12.60      }
   12.61      // If element class already loaded, allocate array klass
   12.62      if (klass != NULL) {
   12.63 -      klass = Klass::cast(klass)->array_klass_or_null(fd.dimension());
   12.64 +      klass = klass->array_klass_or_null(fd.dimension());
   12.65      }
   12.66    } else {
   12.67      MutexLocker mu(SystemDictionary_lock, THREAD);
   12.68 @@ -2466,9 +2466,9 @@
   12.69        Klass* sel_klass = java_lang_Class::as_Klass(mirror);
   12.70        mirror = NULL;  // safety
   12.71        // Emulate ConstantPool::verify_constant_pool_resolve.
   12.72 -      if (Klass::cast(sel_klass)->oop_is_objArray())
   12.73 +      if (sel_klass->oop_is_objArray())
   12.74          sel_klass = ObjArrayKlass::cast(sel_klass)->bottom_klass();
   12.75 -      if (Klass::cast(sel_klass)->oop_is_instance()) {
   12.76 +      if (sel_klass->oop_is_instance()) {
   12.77          KlassHandle sel_kh(THREAD, sel_klass);
   12.78          LinkResolver::check_klass_accessability(accessing_klass, sel_kh, CHECK_(empty));
   12.79        }
    13.1 --- a/src/share/vm/code/dependencies.cpp	Fri Nov 16 09:59:08 2012 +0100
    13.2 +++ b/src/share/vm/code/dependencies.cpp	Fri Nov 16 09:19:12 2012 -0500
    13.3 @@ -552,7 +552,7 @@
    13.4      }
    13.5      tty->print("  %s = %s", what, (put_star? "*": ""));
    13.6      if (arg.is_klass())
    13.7 -      tty->print("%s", Klass::cast((Klass*)arg.metadata_value())->external_name());
    13.8 +      tty->print("%s", ((Klass*)arg.metadata_value())->external_name());
    13.9      else if (arg.is_method())
   13.10        ((Method*)arg.metadata_value())->print_value();
   13.11      else
   13.12 @@ -563,7 +563,7 @@
   13.13      bool put_star = !Dependencies::is_concrete_klass(witness);
   13.14      tty->print_cr("  witness = %s%s",
   13.15                    (put_star? "*": ""),
   13.16 -                  Klass::cast(witness)->external_name());
   13.17 +                  witness->external_name());
   13.18    }
   13.19  }
   13.20  
   13.21 @@ -809,7 +809,7 @@
   13.22      if (!(m->is_public() || m->is_protected()))
   13.23        // The override story is complex when packages get involved.
   13.24        return true;  // Must punt the assertion to true.
   13.25 -    Klass* k = Klass::cast(ctxk);
   13.26 +    Klass* k = ctxk;
   13.27      Method* lm = k->lookup_method(m->name(), m->signature());
   13.28      if (lm == NULL && k->oop_is_instance()) {
   13.29        // It might be an abstract interface method, devoid of mirandas.
   13.30 @@ -836,7 +836,7 @@
   13.31      }
   13.32      ResourceMark rm;
   13.33      tty->print_cr("Dependency method not found in the associated context:");
   13.34 -    tty->print_cr("  context = %s", Klass::cast(ctxk)->external_name());
   13.35 +    tty->print_cr("  context = %s", ctxk->external_name());
   13.36      tty->print(   "  method = "); m->print_short_name(tty); tty->cr();
   13.37      if (lm != NULL) {
   13.38        tty->print( "  found = "); lm->print_short_name(tty); tty->cr();
   13.39 @@ -1011,7 +1011,7 @@
   13.40      for (int i = 0; i < num_participants(); i++) {
   13.41        Klass* part = participant(i);
   13.42        if (part == NULL)  continue;
   13.43 -      assert(changes.involves_context(part) == Klass::cast(new_type)->is_subtype_of(part),
   13.44 +      assert(changes.involves_context(part) == new_type->is_subtype_of(part),
   13.45               "correct marking of participants, b/c new_type is unique");
   13.46        if (changes.involves_context(part)) {
   13.47          // new guy is protected from this check by previous participant
   13.48 @@ -1147,7 +1147,7 @@
   13.49  
   13.50  
   13.51  bool Dependencies::is_concrete_klass(Klass* k) {
   13.52 -  if (Klass::cast(k)->is_abstract())  return false;
   13.53 +  if (k->is_abstract())  return false;
   13.54    // %%% We could treat classes which are concrete but
   13.55    // have not yet been instantiated as virtually abstract.
   13.56    // This would require a deoptimization barrier on first instantiation.
   13.57 @@ -1706,12 +1706,12 @@
   13.58  }
   13.59  
   13.60  bool KlassDepChange::involves_context(Klass* k) {
   13.61 -  if (k == NULL || !Klass::cast(k)->oop_is_instance()) {
   13.62 +  if (k == NULL || !k->oop_is_instance()) {
   13.63      return false;
   13.64    }
   13.65    InstanceKlass* ik = InstanceKlass::cast(k);
   13.66    bool is_contained = ik->is_marked_dependent();
   13.67 -  assert(is_contained == Klass::cast(new_type())->is_subtype_of(k),
   13.68 +  assert(is_contained == new_type()->is_subtype_of(k),
   13.69           "correct marking of potential context types");
   13.70    return is_contained;
   13.71  }
    14.1 --- a/src/share/vm/code/nmethod.cpp	Fri Nov 16 09:59:08 2012 +0100
    14.2 +++ b/src/share/vm/code/nmethod.cpp	Fri Nov 16 09:19:12 2012 -0500
    14.3 @@ -2568,9 +2568,8 @@
    14.4      deps.print_dependency();
    14.5      Klass* ctxk = deps.context_type();
    14.6      if (ctxk != NULL) {
    14.7 -      Klass* k = Klass::cast(ctxk);
    14.8 -      if (k->oop_is_instance() && ((InstanceKlass*)k)->is_dependent_nmethod(this)) {
    14.9 -        tty->print_cr("   [nmethod<=klass]%s", k->external_name());
   14.10 +      if (ctxk->oop_is_instance() && ((InstanceKlass*)ctxk)->is_dependent_nmethod(this)) {
   14.11 +        tty->print_cr("   [nmethod<=klass]%s", ctxk->external_name());
   14.12        }
   14.13      }
   14.14      deps.log_dependency();  // put it into the xml log also
    15.1 --- a/src/share/vm/compiler/disassembler.cpp	Fri Nov 16 09:59:08 2012 +0100
    15.2 +++ b/src/share/vm/compiler/disassembler.cpp	Fri Nov 16 09:19:12 2012 -0500
    15.3 @@ -353,7 +353,7 @@
    15.4        obj->print_value_on(st);
    15.5        if (st->count() == c) {
    15.6          // No output.  (Can happen in product builds.)
    15.7 -        st->print("(a %s)", Klass::cast(obj->klass())->external_name());
    15.8 +        st->print("(a %s)", obj->klass()->external_name());
    15.9        }
   15.10        return;
   15.11      }
    16.1 --- a/src/share/vm/interpreter/bytecodeInterpreter.cpp	Fri Nov 16 09:59:08 2012 +0100
    16.2 +++ b/src/share/vm/interpreter/bytecodeInterpreter.cpp	Fri Nov 16 09:19:12 2012 -0500
    16.3 @@ -2043,8 +2043,8 @@
    16.4              if (objKlassOop != klassOf &&
    16.5                  !objKlassOop->is_subtype_of(klassOf)) {
    16.6                ResourceMark rm(THREAD);
    16.7 -              const char* objName = Klass::cast(objKlassOop)->external_name();
    16.8 -              const char* klassName = Klass::cast(klassOf)->external_name();
    16.9 +              const char* objName = objKlassOop->external_name();
   16.10 +              const char* klassName = klassOf->external_name();
   16.11                char* message = SharedRuntime::generate_class_cast_message(
   16.12                  objName, klassName);
   16.13                VM_JAVA_ERROR(vmSymbols::java_lang_ClassCastException(), message);
    17.1 --- a/src/share/vm/interpreter/interpreterRuntime.cpp	Fri Nov 16 09:59:08 2012 +0100
    17.2 +++ b/src/share/vm/interpreter/interpreterRuntime.cpp	Fri Nov 16 09:19:12 2012 -0500
    17.3 @@ -312,7 +312,7 @@
    17.4  
    17.5  IRT_ENTRY(void, InterpreterRuntime::create_klass_exception(JavaThread* thread, char* name, oopDesc* obj))
    17.6    ResourceMark rm(thread);
    17.7 -  const char* klass_name = Klass::cast(obj->klass())->external_name();
    17.8 +  const char* klass_name = obj->klass()->external_name();
    17.9    // lookup exception klass
   17.10    TempNewSymbol s = SymbolTable::new_symbol(name, CHECK);
   17.11    if (ProfileTraps) {
   17.12 @@ -341,7 +341,7 @@
   17.13  
   17.14    ResourceMark rm(thread);
   17.15    char* message = SharedRuntime::generate_class_cast_message(
   17.16 -    thread, Klass::cast(obj->klass())->external_name());
   17.17 +    thread, obj->klass()->external_name());
   17.18  
   17.19    if (ProfileTraps) {
   17.20      note_trap(thread, Deoptimization::Reason_class_check, CHECK);
    18.1 --- a/src/share/vm/interpreter/linkResolver.cpp	Fri Nov 16 09:59:08 2012 +0100
    18.2 +++ b/src/share/vm/interpreter/linkResolver.cpp	Fri Nov 16 09:19:12 2012 -0500
    18.3 @@ -203,7 +203,7 @@
    18.4    Method* result_oop = klass->uncached_lookup_method(name, signature);
    18.5    result = methodHandle(THREAD, result_oop);
    18.6    while (!result.is_null() && result->is_static()) {
    18.7 -    klass = KlassHandle(THREAD, Klass::cast(result->method_holder())->super());
    18.8 +    klass = KlassHandle(THREAD, result->method_holder()->super());
    18.9      result = methodHandle(THREAD, klass->uncached_lookup_method(name, signature));
   18.10    }
   18.11  }
   18.12 @@ -428,7 +428,7 @@
   18.13        // 3. method lookup failed
   18.14        ResourceMark rm(THREAD);
   18.15        THROW_MSG_CAUSE(vmSymbols::java_lang_NoSuchMethodError(),
   18.16 -                      Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),
   18.17 +                      Method::name_and_sig_as_C_string(resolved_klass(),
   18.18                                                                method_name,
   18.19                                                                method_signature),
   18.20                        nested_exception);
   18.21 @@ -448,7 +448,7 @@
   18.22    if (resolved_method->is_abstract() && !resolved_klass->is_abstract()) {
   18.23      ResourceMark rm(THREAD);
   18.24      THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
   18.25 -              Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),
   18.26 +              Method::name_and_sig_as_C_string(resolved_klass(),
   18.27                                                        method_name,
   18.28                                                        method_signature));
   18.29    }
   18.30 @@ -477,7 +477,7 @@
   18.31            " \"%s\" the class loader (instance of %s) of the current class, %s,"
   18.32            " and the class loader (instance of %s) for resolved class, %s, have"
   18.33            " different Class objects for the type %s used in the signature";
   18.34 -        char* sig = Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),method_name,method_signature);
   18.35 +        char* sig = Method::name_and_sig_as_C_string(resolved_klass(),method_name,method_signature);
   18.36          const char* loader1 = SystemDictionary::loader_name(loader());
   18.37          char* current = InstanceKlass::cast(current_klass())->name()->as_C_string();
   18.38          const char* loader2 = SystemDictionary::loader_name(class_loader());
   18.39 @@ -505,7 +505,7 @@
   18.40    if (!resolved_klass->is_interface()) {
   18.41      ResourceMark rm(THREAD);
   18.42      char buf[200];
   18.43 -    jio_snprintf(buf, sizeof(buf), "Found class %s, but interface was expected", Klass::cast(resolved_klass())->external_name());
   18.44 +    jio_snprintf(buf, sizeof(buf), "Found class %s, but interface was expected", resolved_klass()->external_name());
   18.45      THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
   18.46    }
   18.47  
   18.48 @@ -519,7 +519,7 @@
   18.49        // no method found
   18.50        ResourceMark rm(THREAD);
   18.51        THROW_MSG(vmSymbols::java_lang_NoSuchMethodError(),
   18.52 -                Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),
   18.53 +                Method::name_and_sig_as_C_string(resolved_klass(),
   18.54                                                          method_name,
   18.55                                                          method_signature));
   18.56      }
   18.57 @@ -540,7 +540,7 @@
   18.58            "current class, %s, and the class loader (instance of %s) for "
   18.59            "resolved class, %s, have different Class objects for the type %s "
   18.60            "used in the signature";
   18.61 -        char* sig = Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),method_name,method_signature);
   18.62 +        char* sig = Method::name_and_sig_as_C_string(resolved_klass(),method_name,method_signature);
   18.63          const char* loader1 = SystemDictionary::loader_name(loader());
   18.64          char* current = InstanceKlass::cast(current_klass())->name()->as_C_string();
   18.65          const char* loader2 = SystemDictionary::loader_name(class_loader());
   18.66 @@ -627,7 +627,7 @@
   18.67    if (is_static != fd.is_static()) {
   18.68      ResourceMark rm(THREAD);
   18.69      char msg[200];
   18.70 -    jio_snprintf(msg, sizeof(msg), "Expected %s field %s.%s", is_static ? "static" : "non-static", Klass::cast(resolved_klass())->external_name(), fd.name()->as_C_string());
   18.71 +    jio_snprintf(msg, sizeof(msg), "Expected %s field %s.%s", is_static ? "static" : "non-static", resolved_klass()->external_name(), fd.name()->as_C_string());
   18.72      THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), msg);
   18.73    }
   18.74  
   18.75 @@ -701,7 +701,7 @@
   18.76                                         bool check_access, bool initialize_class, TRAPS) {
   18.77    methodHandle resolved_method;
   18.78    linktime_resolve_static_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, CHECK);
   18.79 -  resolved_klass = KlassHandle(THREAD, Klass::cast(resolved_method->method_holder()));
   18.80 +  resolved_klass = KlassHandle(THREAD, resolved_method->method_holder());
   18.81  
   18.82    // Initialize klass (this should only happen if everything is ok)
   18.83    if (initialize_class && resolved_klass->should_be_initialized()) {
   18.84 @@ -725,7 +725,7 @@
   18.85    if (!resolved_method->is_static()) {
   18.86      ResourceMark rm(THREAD);
   18.87      char buf[200];
   18.88 -    jio_snprintf(buf, sizeof(buf), "Expected static method %s", Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),
   18.89 +    jio_snprintf(buf, sizeof(buf), "Expected static method %s", Method::name_and_sig_as_C_string(resolved_klass(),
   18.90                                                        resolved_method->name(),
   18.91                                                        resolved_method->signature()));
   18.92      THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
   18.93 @@ -789,7 +789,7 @@
   18.94      char buf[200];
   18.95      jio_snprintf(buf, sizeof(buf),
   18.96                   "Expecting non-static method %s",
   18.97 -                 Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),
   18.98 +                 Method::name_and_sig_as_C_string(resolved_klass(),
   18.99                                                           resolved_method->name(),
  18.100                                                           resolved_method->signature()));
  18.101      THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
  18.102 @@ -829,7 +829,7 @@
  18.103        if (sel_method.is_null()) {
  18.104          ResourceMark rm(THREAD);
  18.105          THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
  18.106 -                  Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),
  18.107 +                  Method::name_and_sig_as_C_string(resolved_klass(),
  18.108                                              resolved_method->name(),
  18.109                                              resolved_method->signature()));
  18.110        }
  18.111 @@ -840,7 +840,7 @@
  18.112    if (sel_method->is_static()) {
  18.113      ResourceMark rm(THREAD);
  18.114      char buf[200];
  18.115 -    jio_snprintf(buf, sizeof(buf), "Expecting non-static method %s", Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),
  18.116 +    jio_snprintf(buf, sizeof(buf), "Expecting non-static method %s", Method::name_and_sig_as_C_string(resolved_klass(),
  18.117                                                                                                               resolved_method->name(),
  18.118                                                                                                               resolved_method->signature()));
  18.119      THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
  18.120 @@ -850,7 +850,7 @@
  18.121    if (sel_method->is_abstract()) {
  18.122      ResourceMark rm(THREAD);
  18.123      THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
  18.124 -              Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),
  18.125 +              Method::name_and_sig_as_C_string(resolved_klass(),
  18.126                                                        sel_method->name(),
  18.127                                                        sel_method->signature()));
  18.128    }
  18.129 @@ -881,7 +881,7 @@
  18.130    if (resolved_method->is_static()) {
  18.131      ResourceMark rm(THREAD);
  18.132      char buf[200];
  18.133 -    jio_snprintf(buf, sizeof(buf), "Expecting non-static method %s", Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),
  18.134 +    jio_snprintf(buf, sizeof(buf), "Expecting non-static method %s", Method::name_and_sig_as_C_string(resolved_klass(),
  18.135                                                                                                               resolved_method->name(),
  18.136                                                                                                               resolved_method->signature()));
  18.137      THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
  18.138 @@ -950,7 +950,7 @@
  18.139    if (selected_method.is_null()) {
  18.140      ResourceMark rm(THREAD);
  18.141      THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
  18.142 -              Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),
  18.143 +              Method::name_and_sig_as_C_string(resolved_klass(),
  18.144                                                        resolved_method->name(),
  18.145                                                        resolved_method->signature()));
  18.146    }
  18.147 @@ -959,7 +959,7 @@
  18.148    if (check_null_and_abstract && selected_method->is_abstract()) {
  18.149      ResourceMark rm(THREAD);
  18.150      THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
  18.151 -              Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),
  18.152 +              Method::name_and_sig_as_C_string(resolved_klass(),
  18.153                                                        selected_method->name(),
  18.154                                                        selected_method->signature()));
  18.155    }
  18.156 @@ -999,8 +999,8 @@
  18.157      ResourceMark rm(THREAD);
  18.158      char buf[200];
  18.159      jio_snprintf(buf, sizeof(buf), "Class %s does not implement the requested interface %s",
  18.160 -                 (Klass::cast(recv_klass()))->external_name(),
  18.161 -                 (Klass::cast(resolved_klass()))->external_name());
  18.162 +                 recv_klass()->external_name(),
  18.163 +                 resolved_klass()->external_name());
  18.164      THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
  18.165    }
  18.166    // do lookup based on receiver klass
  18.167 @@ -1012,7 +1012,7 @@
  18.168    if (sel_method.is_null()) {
  18.169      ResourceMark rm(THREAD);
  18.170      THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
  18.171 -              Method::name_and_sig_as_C_string(Klass::cast(recv_klass()),
  18.172 +              Method::name_and_sig_as_C_string(recv_klass(),
  18.173                                                        resolved_method->name(),
  18.174                                                        resolved_method->signature()));
  18.175    }
  18.176 @@ -1020,7 +1020,7 @@
  18.177    if (!sel_method->is_public()) {
  18.178      ResourceMark rm(THREAD);
  18.179      THROW_MSG(vmSymbols::java_lang_IllegalAccessError(),
  18.180 -              Method::name_and_sig_as_C_string(Klass::cast(recv_klass()),
  18.181 +              Method::name_and_sig_as_C_string(recv_klass(),
  18.182                                                        sel_method->name(),
  18.183                                                        sel_method->signature()));
  18.184    }
  18.185 @@ -1028,7 +1028,7 @@
  18.186    if (check_null_and_abstract && sel_method->is_abstract()) {
  18.187      ResourceMark rm(THREAD);
  18.188      THROW_MSG(vmSymbols::java_lang_AbstractMethodError(),
  18.189 -              Method::name_and_sig_as_C_string(Klass::cast(recv_klass()),
  18.190 +              Method::name_and_sig_as_C_string(recv_klass(),
  18.191                                                        sel_method->name(),
  18.192                                                        sel_method->signature()));
  18.193    }
    19.1 --- a/src/share/vm/memory/metaspaceShared.cpp	Fri Nov 16 09:59:08 2012 +0100
    19.2 +++ b/src/share/vm/memory/metaspaceShared.cpp	Fri Nov 16 09:19:12 2012 -0500
    19.3 @@ -431,7 +431,7 @@
    19.4  }
    19.5  
    19.6  static void link_shared_classes(Klass* obj, TRAPS) {
    19.7 -  Klass* k = Klass::cast(obj);
    19.8 +  Klass* k = obj;
    19.9    if (k->oop_is_instance()) {
   19.10      InstanceKlass* ik = (InstanceKlass*) k;
   19.11      // Link the class to cause the bytecodes to be rewritten and the
    20.1 --- a/src/share/vm/memory/universe.cpp	Fri Nov 16 09:59:08 2012 +0100
    20.2 +++ b/src/share/vm/memory/universe.cpp	Fri Nov 16 09:19:12 2012 -0500
    20.3 @@ -346,7 +346,7 @@
    20.4    // ---
    20.5    // New
    20.6    // Have already been initialized.
    20.7 -  Klass::cast(_objectArrayKlassObj)->append_to_sibling_list();
    20.8 +  _objectArrayKlassObj->append_to_sibling_list();
    20.9  
   20.10    // Compute is_jdk version flags.
   20.11    // Only 1.3 or later has the java.lang.Shutdown class.
    21.1 --- a/src/share/vm/oops/arrayKlass.cpp	Fri Nov 16 09:59:08 2012 +0100
    21.2 +++ b/src/share/vm/oops/arrayKlass.cpp	Fri Nov 16 09:19:12 2012 -0500
    21.3 @@ -67,7 +67,7 @@
    21.4  Method* ArrayKlass::uncached_lookup_method(Symbol* name, Symbol* signature) const {
    21.5    // There are no methods in an array klass but the super class (Object) has some
    21.6    assert(super(), "super klass must be present");
    21.7 -  return Klass::cast(super())->uncached_lookup_method(name, signature);
    21.8 +  return super()->uncached_lookup_method(name, signature);
    21.9  }
   21.10  
   21.11  ArrayKlass::ArrayKlass(Symbol* name) {
    22.1 --- a/src/share/vm/oops/cpCache.cpp	Fri Nov 16 09:59:08 2012 +0100
    22.2 +++ b/src/share/vm/oops/cpCache.cpp	Fri Nov 16 09:19:12 2012 -0500
    22.3 @@ -371,7 +371,7 @@
    22.4          int holder_index = cpool->uncached_klass_ref_index_at(constant_pool_index());
    22.5          if (cpool->tag_at(holder_index).is_klass()) {
    22.6            Klass* klass = cpool->resolved_klass_at(holder_index);
    22.7 -          if (!Klass::cast(klass)->oop_is_instance())
    22.8 +          if (!klass->oop_is_instance())
    22.9              klass = SystemDictionary::Object_klass();
   22.10            return InstanceKlass::cast(klass)->method_at_vtable(f2_as_index());
   22.11          }
    23.1 --- a/src/share/vm/oops/instanceKlass.cpp	Fri Nov 16 09:59:08 2012 +0100
    23.2 +++ b/src/share/vm/oops/instanceKlass.cpp	Fri Nov 16 09:19:12 2012 -0500
    23.3 @@ -727,8 +727,8 @@
    23.4  
    23.5    // Step 7
    23.6    Klass* super_klass = this_oop->super();
    23.7 -  if (super_klass != NULL && !this_oop->is_interface() && Klass::cast(super_klass)->should_be_initialized()) {
    23.8 -    Klass::cast(super_klass)->initialize(THREAD);
    23.9 +  if (super_klass != NULL && !this_oop->is_interface() && super_klass->should_be_initialized()) {
   23.10 +    super_klass->initialize(THREAD);
   23.11  
   23.12      if (HAS_PENDING_EXCEPTION) {
   23.13        Handle e(THREAD, PENDING_EXCEPTION);
   23.14 @@ -924,7 +924,7 @@
   23.15  }
   23.16  
   23.17  bool InstanceKlass::compute_is_subtype_of(Klass* k) {
   23.18 -  if (Klass::cast(k)->is_interface()) {
   23.19 +  if (k->is_interface()) {
   23.20      return implements_interface(k);
   23.21    } else {
   23.22      return Klass::compute_is_subtype_of(k);
   23.23 @@ -933,7 +933,7 @@
   23.24  
   23.25  bool InstanceKlass::implements_interface(Klass* k) const {
   23.26    if (this == k) return true;
   23.27 -  assert(Klass::cast(k)->is_interface(), "should be an interface class");
   23.28 +  assert(k->is_interface(), "should be an interface class");
   23.29    for (int i = 0; i < transitive_interfaces()->length(); i++) {
   23.30      if (transitive_interfaces()->at(i) == k) {
   23.31        return true;
   23.32 @@ -1107,7 +1107,7 @@
   23.33    const int n = local_interfaces()->length();
   23.34    for (int i = 0; i < n; i++) {
   23.35      Klass* intf1 = local_interfaces()->at(i);
   23.36 -    assert(Klass::cast(intf1)->is_interface(), "just checking type");
   23.37 +    assert(intf1->is_interface(), "just checking type");
   23.38      // search for field in current interface
   23.39      if (InstanceKlass::cast(intf1)->find_local_field(name, sig, fd)) {
   23.40        assert(fd->is_static(), "interface field must be static");
   23.41 @@ -1178,7 +1178,7 @@
   23.42      if (InstanceKlass::cast(klass)->find_local_field_from_offset(offset, is_static, fd)) {
   23.43        return true;
   23.44      }
   23.45 -    klass = Klass::cast(klass)->super();
   23.46 +    klass = klass->super();
   23.47    }
   23.48    return false;
   23.49  }
   23.50 @@ -2366,19 +2366,19 @@
   23.51  bool InstanceKlass::is_same_class_package(Klass* class2) {
   23.52    Klass* class1 = this;
   23.53    oop classloader1 = InstanceKlass::cast(class1)->class_loader();
   23.54 -  Symbol* classname1 = Klass::cast(class1)->name();
   23.55 -
   23.56 -  if (Klass::cast(class2)->oop_is_objArray()) {
   23.57 +  Symbol* classname1 = class1->name();
   23.58 +
   23.59 +  if (class2->oop_is_objArray()) {
   23.60      class2 = ObjArrayKlass::cast(class2)->bottom_klass();
   23.61    }
   23.62    oop classloader2;
   23.63 -  if (Klass::cast(class2)->oop_is_instance()) {
   23.64 +  if (class2->oop_is_instance()) {
   23.65      classloader2 = InstanceKlass::cast(class2)->class_loader();
   23.66    } else {
   23.67 -    assert(Klass::cast(class2)->oop_is_typeArray(), "should be type array");
   23.68 +    assert(class2->oop_is_typeArray(), "should be type array");
   23.69      classloader2 = NULL;
   23.70    }
   23.71 -  Symbol* classname2 = Klass::cast(class2)->name();
   23.72 +  Symbol* classname2 = class2->name();
   23.73  
   23.74    return InstanceKlass::is_same_class_package(classloader1, classname1,
   23.75                                                classloader2, classname2);
   23.76 @@ -2387,7 +2387,7 @@
   23.77  bool InstanceKlass::is_same_class_package(oop classloader2, Symbol* classname2) {
   23.78    Klass* class1 = this;
   23.79    oop classloader1 = InstanceKlass::cast(class1)->class_loader();
   23.80 -  Symbol* classname1 = Klass::cast(class1)->name();
   23.81 +  Symbol* classname1 = class1->name();
   23.82  
   23.83    return InstanceKlass::is_same_class_package(classloader1, classname1,
   23.84                                                classloader2, classname2);
   23.85 @@ -2478,7 +2478,7 @@
   23.86  bool InstanceKlass::is_same_package_member_impl(instanceKlassHandle class1,
   23.87                                                  Klass* class2_oop, TRAPS) {
   23.88    if (class2_oop == class1())                       return true;
   23.89 -  if (!Klass::cast(class2_oop)->oop_is_instance())  return false;
   23.90 +  if (!class2_oop->oop_is_instance())  return false;
   23.91    instanceKlassHandle class2(THREAD, class2_oop);
   23.92  
   23.93    // must be in same package before we try anything else
   23.94 @@ -3011,7 +3011,7 @@
   23.95    if (im != NULL) {
   23.96      guarantee(is_interface(), "only interfaces should have implementor set");
   23.97      guarantee(im->is_klass(), "should be klass");
   23.98 -    guarantee(!Klass::cast(im)->is_interface() || im == this,
   23.99 +    guarantee(!im->is_interface() || im == this,
  23.100        "implementors cannot be interfaces");
  23.101    }
  23.102  
  23.103 @@ -3020,7 +3020,7 @@
  23.104      Array<Klass*>* local_interfaces = this->local_interfaces();
  23.105      for (int j = 0; j < local_interfaces->length(); j++) {
  23.106        Klass* e = local_interfaces->at(j);
  23.107 -      guarantee(e->is_klass() && Klass::cast(e)->is_interface(), "invalid local interface");
  23.108 +      guarantee(e->is_klass() && e->is_interface(), "invalid local interface");
  23.109      }
  23.110    }
  23.111  
  23.112 @@ -3029,7 +3029,7 @@
  23.113      Array<Klass*>* transitive_interfaces = this->transitive_interfaces();
  23.114      for (int j = 0; j < transitive_interfaces->length(); j++) {
  23.115        Klass* e = transitive_interfaces->at(j);
  23.116 -      guarantee(e->is_klass() && Klass::cast(e)->is_interface(), "invalid transitive interface");
  23.117 +      guarantee(e->is_klass() && e->is_interface(), "invalid transitive interface");
  23.118      }
  23.119    }
  23.120  
    24.1 --- a/src/share/vm/oops/klass.cpp	Fri Nov 16 09:59:08 2012 +0100
    24.2 +++ b/src/share/vm/oops/klass.cpp	Fri Nov 16 09:19:12 2012 -0500
    24.3 @@ -56,7 +56,7 @@
    24.4  
    24.5    while (t != NULL) {
    24.6      if (t == k) return true;
    24.7 -    t = Klass::cast(t)->super();
    24.8 +    t = t->super();
    24.9    }
   24.10    return false;
   24.11  }
   24.12 @@ -243,16 +243,16 @@
   24.13        juint j = super_depth();
   24.14        assert(j == my_depth, "computed accessor gets right answer");
   24.15        Klass* t = this;
   24.16 -      while (!Klass::cast(t)->can_be_primary_super()) {
   24.17 -        t = Klass::cast(t)->super();
   24.18 -        j = Klass::cast(t)->super_depth();
   24.19 +      while (!t->can_be_primary_super()) {
   24.20 +        t = t->super();
   24.21 +        j = t->super_depth();
   24.22        }
   24.23        for (juint j1 = j+1; j1 < primary_super_limit(); j1++) {
   24.24          assert(primary_super_of_depth(j1) == NULL, "super list padding");
   24.25        }
   24.26        while (t != NULL) {
   24.27          assert(primary_super_of_depth(j) == t, "super list initialization");
   24.28 -        t = Klass::cast(t)->super();
   24.29 +        t = t->super();
   24.30          --j;
   24.31        }
   24.32        assert(j == (juint)-1, "correct depth count");
   24.33 @@ -333,7 +333,7 @@
   24.34  
   24.35  
   24.36  Klass* Klass::subklass() const {
   24.37 -  return _subklass == NULL ? NULL : Klass::cast(_subklass);
   24.38 +  return _subklass == NULL ? NULL : _subklass;
   24.39  }
   24.40  
   24.41  InstanceKlass* Klass::superklass() const {
   24.42 @@ -342,7 +342,7 @@
   24.43  }
   24.44  
   24.45  Klass* Klass::next_sibling() const {
   24.46 -  return _next_sibling == NULL ? NULL : Klass::cast(_next_sibling);
   24.47 +  return _next_sibling == NULL ? NULL : _next_sibling;
   24.48  }
   24.49  
   24.50  void Klass::set_subklass(Klass* s) {
    25.1 --- a/src/share/vm/oops/klass.hpp	Fri Nov 16 09:59:08 2012 +0100
    25.2 +++ b/src/share/vm/oops/klass.hpp	Fri Nov 16 09:19:12 2012 -0500
    25.3 @@ -422,12 +422,6 @@
    25.4    // if not, throw either an Error or an Exception.
    25.5    virtual void check_valid_for_instantiation(bool throwError, TRAPS);
    25.6  
    25.7 -  // Casting
    25.8 -  static Klass* cast(Klass* k) {
    25.9 -    assert(k->is_klass(), "cast to Klass");
   25.10 -    return k;
   25.11 -  }
   25.12 -
   25.13    // array copying
   25.14    virtual void  copy_array(arrayOop s, int src_pos, arrayOop d, int dst_pos, int length, TRAPS);
   25.15  
    26.1 --- a/src/share/vm/oops/klassVtable.cpp	Fri Nov 16 09:59:08 2012 +0100
    26.2 +++ b/src/share/vm/oops/klassVtable.cpp	Fri Nov 16 09:19:12 2012 -0500
    26.3 @@ -746,7 +746,7 @@
    26.4      while (target != NULL && target->is_static()) {
    26.5        // continue with recursive lookup through the superclass
    26.6        Klass* super = target->method_holder()->super();
    26.7 -      target = (super == NULL) ? (Method*)NULL : Klass::cast(super)->uncached_lookup_method(method_name, method_signature);
    26.8 +      target = (super == NULL) ? (Method*)NULL : super->uncached_lookup_method(method_name, method_signature);
    26.9      }
   26.10      if (target == NULL || !target->is_public() || target->is_abstract()) {
   26.11        // Entry do not resolve. Leave it empty
   26.12 @@ -852,7 +852,7 @@
   26.13    // Handle array argument
   26.14    for(int i = 0; i < transitive_intf->length(); i++) {
   26.15      Klass* intf = transitive_intf->at(i);
   26.16 -    assert(Klass::cast(intf)->is_interface(), "sanity check");
   26.17 +    assert(intf->is_interface(), "sanity check");
   26.18  
   26.19      // Find no. of methods excluding a <clinit>
   26.20      int method_count = InstanceKlass::cast(intf)->methods()->length();
    27.1 --- a/src/share/vm/oops/method.cpp	Fri Nov 16 09:59:08 2012 +0100
    27.2 +++ b/src/share/vm/oops/method.cpp	Fri Nov 16 09:19:12 2012 -0500
    27.3 @@ -152,11 +152,11 @@
    27.4  }
    27.5  
    27.6  char* Method::name_and_sig_as_C_string() const {
    27.7 -  return name_and_sig_as_C_string(Klass::cast(constants()->pool_holder()), name(), signature());
    27.8 +  return name_and_sig_as_C_string(constants()->pool_holder(), name(), signature());
    27.9  }
   27.10  
   27.11  char* Method::name_and_sig_as_C_string(char* buf, int size) const {
   27.12 -  return name_and_sig_as_C_string(Klass::cast(constants()->pool_holder()), name(), signature(), buf, size);
   27.13 +  return name_and_sig_as_C_string(constants()->pool_holder(), name(), signature(), buf, size);
   27.14  }
   27.15  
   27.16  char* Method::name_and_sig_as_C_string(Klass* klass, Symbol* method_name, Symbol* signature) {
   27.17 @@ -578,8 +578,8 @@
   27.18      for (int i = 0; i < length; i++) {
   27.19        CheckedExceptionElement* table = h_this->checked_exceptions_start(); // recompute on each iteration, not gc safe
   27.20        Klass* k = h_this->constants()->klass_at(table[i].class_cp_index, CHECK_(objArrayHandle()));
   27.21 -      assert(Klass::cast(k)->is_subclass_of(SystemDictionary::Throwable_klass()), "invalid exception class");
   27.22 -      mirrors->obj_at_put(i, Klass::cast(k)->java_mirror());
   27.23 +      assert(k->is_subclass_of(SystemDictionary::Throwable_klass()), "invalid exception class");
   27.24 +      mirrors->obj_at_put(i, k->java_mirror());
   27.25      }
   27.26      return mirrors;
   27.27    }
   27.28 @@ -618,7 +618,7 @@
   27.29      Thread *thread = Thread::current();
   27.30      Symbol* klass_name = constants()->klass_name_at(klass_index);
   27.31      Handle loader(thread, method_holder()->class_loader());
   27.32 -    Handle prot  (thread, Klass::cast(method_holder())->protection_domain());
   27.33 +    Handle prot  (thread, method_holder()->protection_domain());
   27.34      return SystemDictionary::find(klass_name, loader, prot, thread) != NULL;
   27.35    } else {
   27.36      return true;
   27.37 @@ -1067,8 +1067,8 @@
   27.38  }
   27.39  
   27.40  Klass* Method::check_non_bcp_klass(Klass* klass) {
   27.41 -  if (klass != NULL && Klass::cast(klass)->class_loader() != NULL) {
   27.42 -    if (Klass::cast(klass)->oop_is_objArray())
   27.43 +  if (klass != NULL && klass->class_loader() != NULL) {
   27.44 +    if (klass->oop_is_objArray())
   27.45        klass = ObjArrayKlass::cast(klass)->bottom_klass();
   27.46      return klass;
   27.47    }
    28.1 --- a/src/share/vm/oops/objArrayKlass.cpp	Fri Nov 16 09:59:08 2012 +0100
    28.2 +++ b/src/share/vm/oops/objArrayKlass.cpp	Fri Nov 16 09:19:12 2012 -0500
    28.3 @@ -81,7 +81,7 @@
    28.4        Array<Klass*>* element_supers = element_klass->secondary_supers();
    28.5        for( int i = element_supers->length()-1; i >= 0; i-- ) {
    28.6          Klass* elem_super = element_supers->at(i);
    28.7 -        if (Klass::cast(elem_super)->array_klass_or_null() == NULL) {
    28.8 +        if (elem_super->array_klass_or_null() == NULL) {
    28.9            supers_exist = false;
   28.10            break;
   28.11          }
   28.12 @@ -172,7 +172,7 @@
   28.13    } else {
   28.14      bk = element_klass();
   28.15    }
   28.16 -  assert(bk != NULL && (Klass::cast(bk)->oop_is_instance() || Klass::cast(bk)->oop_is_typeArray()), "invalid bottom klass");
   28.17 +  assert(bk != NULL && (bk->oop_is_instance() || bk->oop_is_typeArray()), "invalid bottom klass");
   28.18    this->set_bottom_klass(bk);
   28.19    this->set_class_loader_data(bk->class_loader_data());
   28.20  
   28.21 @@ -254,7 +254,7 @@
   28.22      // We have to make sure all elements conform to the destination array
   28.23      Klass* bound = ObjArrayKlass::cast(d->klass())->element_klass();
   28.24      Klass* stype = ObjArrayKlass::cast(s->klass())->element_klass();
   28.25 -    if (stype == bound || Klass::cast(stype)->is_subtype_of(bound)) {
   28.26 +    if (stype == bound || stype->is_subtype_of(bound)) {
   28.27        // elements are guaranteed to be subtypes, so no check necessary
   28.28        bs->write_ref_array_pre(dst, length);
   28.29        Copy::conjoint_oops_atomic(src, dst, length);
   28.30 @@ -271,7 +271,7 @@
   28.31          oop new_val = element_is_null ? oop(NULL)
   28.32                                        : oopDesc::decode_heap_oop_not_null(element);
   28.33          if (element_is_null ||
   28.34 -            Klass::cast((new_val->klass()))->is_subtype_of(bound)) {
   28.35 +            (new_val->klass())->is_subtype_of(bound)) {
   28.36            bs->write_ref_field_pre(p, new_val);
   28.37            *p = *from;
   28.38          } else {
   28.39 @@ -381,7 +381,7 @@
   28.40  
   28.41  GrowableArray<Klass*>* ObjArrayKlass::compute_secondary_supers(int num_extra_slots) {
   28.42    // interfaces = { cloneable_klass, serializable_klass, elemSuper[], ... };
   28.43 -  Array<Klass*>* elem_supers = Klass::cast(element_klass())->secondary_supers();
   28.44 +  Array<Klass*>* elem_supers = element_klass()->secondary_supers();
   28.45    int num_elem_supers = elem_supers == NULL ? 0 : elem_supers->length();
   28.46    int num_secondaries = num_extra_slots + 2 + num_elem_supers;
   28.47    if (num_secondaries == 2) {
   28.48 @@ -411,7 +411,7 @@
   28.49  }
   28.50  
   28.51  void ObjArrayKlass::initialize(TRAPS) {
   28.52 -  Klass::cast(bottom_klass())->initialize(THREAD);  // dispatches to either InstanceKlass or TypeArrayKlass
   28.53 +  bottom_klass()->initialize(THREAD);  // dispatches to either InstanceKlass or TypeArrayKlass
   28.54  }
   28.55  
   28.56  #define ObjArrayKlass_SPECIALIZED_OOP_ITERATE(T, a, p, do_oop) \
   28.57 @@ -607,7 +607,7 @@
   28.58      return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC;
   28.59    }
   28.60    // Return the flags of the bottom element type.
   28.61 -  jint element_flags = Klass::cast(bottom_klass())->compute_modifier_flags(CHECK_0);
   28.62 +  jint element_flags = bottom_klass()->compute_modifier_flags(CHECK_0);
   28.63  
   28.64    return (element_flags & (JVM_ACC_PUBLIC | JVM_ACC_PRIVATE | JVM_ACC_PROTECTED))
   28.65                          | (JVM_ACC_ABSTRACT | JVM_ACC_FINAL);
   28.66 @@ -686,7 +686,7 @@
   28.67    guarantee(element_klass()->is_klass(), "should be klass");
   28.68    guarantee(bottom_klass()->is_metadata(), "should be in metaspace");
   28.69    guarantee(bottom_klass()->is_klass(), "should be klass");
   28.70 -  Klass* bk = Klass::cast(bottom_klass());
   28.71 +  Klass* bk = bottom_klass();
   28.72    guarantee(bk->oop_is_instance() || bk->oop_is_typeArray(),  "invalid bottom klass");
   28.73  }
   28.74  
    29.1 --- a/src/share/vm/oops/objArrayKlass.hpp	Fri Nov 16 09:59:08 2012 +0100
    29.2 +++ b/src/share/vm/oops/objArrayKlass.hpp	Fri Nov 16 09:19:12 2012 -0500
    29.3 @@ -74,7 +74,7 @@
    29.4    void  copy_array(arrayOop s, int src_pos, arrayOop d, int dst_pos, int length, TRAPS);
    29.5  
    29.6    // Compute protection domain
    29.7 -  oop protection_domain() { return Klass::cast(bottom_klass())->protection_domain(); }
    29.8 +  oop protection_domain() { return bottom_klass()->protection_domain(); }
    29.9  
   29.10   private:
   29.11    // Either oop or narrowOop depending on UseCompressedOops.
    30.1 --- a/src/share/vm/opto/runtime.cpp	Fri Nov 16 09:59:08 2012 +0100
    30.2 +++ b/src/share/vm/opto/runtime.cpp	Fri Nov 16 09:19:12 2012 -0500
    30.3 @@ -236,7 +236,7 @@
    30.4    assert(check_compiled_frame(thread), "incorrect caller");
    30.5  
    30.6    // These checks are cheap to make and support reflective allocation.
    30.7 -  int lh = Klass::cast(klass)->layout_helper();
    30.8 +  int lh = klass->layout_helper();
    30.9    if (Klass::layout_helper_needs_slow_path(lh)
   30.10        || !InstanceKlass::cast(klass)->is_initialized()) {
   30.11      KlassHandle kh(THREAD, klass);
   30.12 @@ -283,7 +283,7 @@
   30.13    // Scavenge and allocate an instance.
   30.14    oop result;
   30.15  
   30.16 -  if (Klass::cast(array_type)->oop_is_typeArray()) {
   30.17 +  if (array_type->oop_is_typeArray()) {
   30.18      // The oopFactory likes to work with the element type.
   30.19      // (We could bypass the oopFactory, since it doesn't add much value.)
   30.20      BasicType elem_type = TypeArrayKlass::cast(array_type)->element_type();
   30.21 @@ -321,7 +321,7 @@
   30.22    // Scavenge and allocate an instance.
   30.23    oop result;
   30.24  
   30.25 -  assert(Klass::cast(array_type)->oop_is_typeArray(), "should be called only for type array");
   30.26 +  assert(array_type->oop_is_typeArray(), "should be called only for type array");
   30.27    // The oopFactory likes to work with the element type.
   30.28    BasicType elem_type = TypeArrayKlass::cast(array_type)->element_type();
   30.29    result = oopFactory::new_typeArray_nozero(elem_type, len, THREAD);
    31.1 --- a/src/share/vm/prims/jni.cpp	Fri Nov 16 09:59:08 2012 +0100
    31.2 +++ b/src/share/vm/prims/jni.cpp	Fri Nov 16 09:19:12 2012 -0500
    31.3 @@ -234,13 +234,13 @@
    31.4  intptr_t jfieldIDWorkaround::encode_klass_hash(Klass* k, intptr_t offset) {
    31.5    if (offset <= small_offset_mask) {
    31.6      Klass* field_klass = k;
    31.7 -    Klass* super_klass = Klass::cast(field_klass)->super();
    31.8 +    Klass* super_klass = field_klass->super();
    31.9      // With compressed oops the most super class with nonstatic fields would
   31.10      // be the owner of fields embedded in the header.
   31.11      while (InstanceKlass::cast(super_klass)->has_nonstatic_fields() &&
   31.12             InstanceKlass::cast(super_klass)->contains_field_offset(offset)) {
   31.13        field_klass = super_klass;   // super contains the field also
   31.14 -      super_klass = Klass::cast(field_klass)->super();
   31.15 +      super_klass = field_klass->super();
   31.16      }
   31.17      debug_only(No_Safepoint_Verifier nosafepoint;)
   31.18      uintptr_t klass_hash = field_klass->identity_hash();
   31.19 @@ -250,7 +250,7 @@
   31.20      #ifndef PRODUCT
   31.21      {
   31.22        ResourceMark rm;
   31.23 -      warning("VerifyJNIFields: long offset %d in %s", offset, Klass::cast(k)->external_name());
   31.24 +      warning("VerifyJNIFields: long offset %d in %s", offset, k->external_name());
   31.25      }
   31.26      #endif
   31.27  #endif
   31.28 @@ -266,7 +266,7 @@
   31.29      // Could use a non-blocking query for identity_hash here...
   31.30      if ((k->identity_hash() & klass_mask) == klass_hash)
   31.31        return true;
   31.32 -    k = Klass::cast(k)->super();
   31.33 +    k = k->super();
   31.34    } while (k != NULL);
   31.35    return false;
   31.36  }
   31.37 @@ -284,7 +284,7 @@
   31.38        #ifndef PRODUCT
   31.39        if (Verbose) {
   31.40    ResourceMark rm;
   31.41 -  warning("VerifyJNIFields: unverified offset %d for %s", offset, Klass::cast(k)->external_name());
   31.42 +  warning("VerifyJNIFields: unverified offset %d for %s", offset, k->external_name());
   31.43        }
   31.44        #endif
   31.45  #endif
   31.46 @@ -416,7 +416,7 @@
   31.47    }
   31.48  
   31.49    cls = (jclass)JNIHandles::make_local(
   31.50 -    env, Klass::cast(k)->java_mirror());
   31.51 +    env, k->java_mirror());
   31.52    return cls;
   31.53  JNI_END
   31.54  
   31.55 @@ -537,7 +537,7 @@
   31.56  
   31.57    KlassHandle k1(THREAD, k);
   31.58    // Make sure class is initialized before handing id's out to methods
   31.59 -  Klass::cast(k1())->initialize(CHECK_NULL);
   31.60 +  k1()->initialize(CHECK_NULL);
   31.61    Method* m = InstanceKlass::cast(k1())->method_with_idnum(slot);
   31.62    ret = m==NULL? NULL : m->jmethod_id();  // return NULL if reflected method deleted
   31.63    return ret;
   31.64 @@ -570,7 +570,7 @@
   31.65  
   31.66    KlassHandle k1(THREAD, k);
   31.67    // Make sure class is initialized before handing id's out to fields
   31.68 -  Klass::cast(k1())->initialize(CHECK_NULL);
   31.69 +  k1()->initialize(CHECK_NULL);
   31.70  
   31.71    // First check if this is a static field
   31.72    if (modifiers & JVM_ACC_STATIC) {
   31.73 @@ -649,17 +649,17 @@
   31.74    // interfaces return NULL
   31.75    // proper classes return Klass::super()
   31.76    Klass* k = java_lang_Class::as_Klass(mirror);
   31.77 -  if (Klass::cast(k)->is_interface()) return NULL;
   31.78 +  if (k->is_interface()) return NULL;
   31.79  
   31.80    // return mirror for superclass
   31.81 -  Klass* super = Klass::cast(k)->java_super();
   31.82 +  Klass* super = k->java_super();
   31.83    // super2 is the value computed by the compiler's getSuperClass intrinsic:
   31.84 -  debug_only(Klass* super2 = ( Klass::cast(k)->oop_is_array()
   31.85 +  debug_only(Klass* super2 = ( k->oop_is_array()
   31.86                                   ? SystemDictionary::Object_klass()
   31.87 -                                 : Klass::cast(k)->super() ) );
   31.88 +                                 : k->super() ) );
   31.89    assert(super == super2,
   31.90           "java_super computation depends on interface, array, other super");
   31.91 -  obj = (super == NULL) ? NULL : (jclass) JNIHandles::make_local(Klass::cast(super)->java_mirror());
   31.92 +  obj = (super == NULL) ? NULL : (jclass) JNIHandles::make_local(super->java_mirror());
   31.93    return obj;
   31.94  JNI_END
   31.95  
   31.96 @@ -687,7 +687,7 @@
   31.97    Klass* sub_klass   = java_lang_Class::as_Klass(sub_mirror);
   31.98    Klass* super_klass = java_lang_Class::as_Klass(super_mirror);
   31.99    assert(sub_klass != NULL && super_klass != NULL, "invalid arguments to jni_IsAssignableFrom");
  31.100 -  jboolean ret = Klass::cast(sub_klass)->is_subtype_of(super_klass) ?
  31.101 +  jboolean ret = sub_klass->is_subtype_of(super_klass) ?
  31.102                     JNI_TRUE : JNI_FALSE;
  31.103  #ifndef USDT2
  31.104    DTRACE_PROBE1(hotspot_jni, IsAssignableFrom__return, ret);
  31.105 @@ -821,7 +821,7 @@
  31.106          ResourceMark rm(THREAD);
  31.107          jio_fprintf(defaultStream::error_stream(),
  31.108          ". Uncaught exception of type %s.",
  31.109 -        Klass::cast(ex->klass())->external_name());
  31.110 +        ex->klass()->external_name());
  31.111        }
  31.112      }
  31.113    }
  31.114 @@ -1359,7 +1359,7 @@
  31.115      Method* m = Method::resolve_jmethod_id(method_id);
  31.116      number_of_parameters = m->size_of_parameters();
  31.117      Klass* holder = m->method_holder();
  31.118 -    if (!(Klass::cast(holder))->is_interface()) {
  31.119 +    if (!(holder)->is_interface()) {
  31.120        // non-interface call -- for that little speed boost, don't handlize
  31.121        debug_only(No_Safepoint_Verifier nosafepoint;)
  31.122        if (call_type == JNI_VIRTUAL) {
  31.123 @@ -1424,7 +1424,7 @@
  31.124  
  31.125  static instanceOop alloc_object(jclass clazz, TRAPS) {
  31.126    KlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
  31.127 -  Klass::cast(k())->check_valid_for_instantiation(false, CHECK_NULL);
  31.128 +  k()->check_valid_for_instantiation(false, CHECK_NULL);
  31.129    InstanceKlass::cast(k())->initialize(CHECK_NULL);
  31.130    instanceOop ih = InstanceKlass::cast(k())->allocate_instance(THREAD);
  31.131    return ih;
  31.132 @@ -1546,7 +1546,7 @@
  31.133  #endif /* USDT2 */
  31.134    Klass* k = JNIHandles::resolve_non_null(obj)->klass();
  31.135    jclass ret =
  31.136 -    (jclass) JNIHandles::make_local(env, Klass::cast(k)->java_mirror());
  31.137 +    (jclass) JNIHandles::make_local(env, k->java_mirror());
  31.138  #ifndef USDT2
  31.139    DTRACE_PROBE1(hotspot_jni, GetObjectClass__return, ret);
  31.140  #else /* USDT2 */
  31.141 @@ -1611,7 +1611,7 @@
  31.142  
  31.143    // Make sure class is linked and initialized before handing id's out to
  31.144    // Method*s.
  31.145 -  Klass::cast(klass())->initialize(CHECK_NULL);
  31.146 +  klass()->initialize(CHECK_NULL);
  31.147  
  31.148    Method* m;
  31.149    if (name == vmSymbols::object_initializer_name() ||
  31.150 @@ -2427,7 +2427,7 @@
  31.151    JNI_ArgumentPusherVaArg ap(methodID, args); \
  31.152    /* Make sure class is initialized before trying to invoke its method */ \
  31.153    KlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls))); \
  31.154 -  Klass::cast(k())->initialize(CHECK_0); \
  31.155 +  k()->initialize(CHECK_0); \
  31.156    jni_invoke_static(env, &jvalue, NULL, JNI_STATIC, methodID, &ap, CHECK_0); \
  31.157    va_end(args); \
  31.158    ret = jvalue.get_##ResultType(); \
  31.159 @@ -2612,10 +2612,10 @@
  31.160    KlassHandle k(THREAD,
  31.161                  java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
  31.162    // Make sure class is initialized before handing id's out to fields
  31.163 -  Klass::cast(k())->initialize(CHECK_NULL);
  31.164 +  k()->initialize(CHECK_NULL);
  31.165  
  31.166    fieldDescriptor fd;
  31.167 -  if (!Klass::cast(k())->oop_is_instance() ||
  31.168 +  if (!k()->oop_is_instance() ||
  31.169        !InstanceKlass::cast(k())->find_field(fieldname, signame, false, &fd)) {
  31.170      THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), (char*) name);
  31.171    }
  31.172 @@ -2977,10 +2977,10 @@
  31.173    KlassHandle k(THREAD,
  31.174                  java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
  31.175    // Make sure class is initialized before handing id's out to static fields
  31.176 -  Klass::cast(k())->initialize(CHECK_NULL);
  31.177 +  k()->initialize(CHECK_NULL);
  31.178  
  31.179    fieldDescriptor fd;
  31.180 -  if (!Klass::cast(k())->oop_is_instance() ||
  31.181 +  if (!k()->oop_is_instance() ||
  31.182        !InstanceKlass::cast(k())->find_field(fieldname, signame, true, &fd)) {
  31.183      THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), (char*) name);
  31.184    }
  31.185 @@ -3440,7 +3440,7 @@
  31.186    jobjectArray ret = NULL;
  31.187    DT_RETURN_MARK(NewObjectArray, jobjectArray, (const jobjectArray&)ret);
  31.188    KlassHandle ek(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(elementClass)));
  31.189 -  Klass* ako = Klass::cast(ek())->array_klass(CHECK_NULL);
  31.190 +  Klass* ako = ek()->array_klass(CHECK_NULL);
  31.191    KlassHandle ak = KlassHandle(THREAD, ako);
  31.192    ObjArrayKlass::cast(ak())->initialize(CHECK_NULL);
  31.193    objArrayOop result = ObjArrayKlass::cast(ak())->allocate(length, CHECK_NULL);
  31.194 @@ -3971,7 +3971,7 @@
  31.195      if (trial_name == NULL) {
  31.196        continue; // no such symbol, so this prefix wasn't used, try the next prefix
  31.197      }
  31.198 -    method = Klass::cast(k())->lookup_method(trial_name, signature);
  31.199 +    method = k()->lookup_method(trial_name, signature);
  31.200      if (method == NULL) {
  31.201        continue; // signature doesn't match, try the next prefix
  31.202      }
  31.203 @@ -3988,12 +3988,12 @@
  31.204  }
  31.205  
  31.206  static bool register_native(KlassHandle k, Symbol* name, Symbol* signature, address entry, TRAPS) {
  31.207 -  Method* method = Klass::cast(k())->lookup_method(name, signature);
  31.208 +  Method* method = k()->lookup_method(name, signature);
  31.209    if (method == NULL) {
  31.210      ResourceMark rm;
  31.211      stringStream st;
  31.212      st.print("Method %s name or signature does not match",
  31.213 -             Method::name_and_sig_as_C_string(Klass::cast(k()), name, signature));
  31.214 +             Method::name_and_sig_as_C_string(k(), name, signature));
  31.215      THROW_MSG_(vmSymbols::java_lang_NoSuchMethodError(), st.as_string(), false);
  31.216    }
  31.217    if (!method->is_native()) {
  31.218 @@ -4003,7 +4003,7 @@
  31.219        ResourceMark rm;
  31.220        stringStream st;
  31.221        st.print("Method %s is not declared as native",
  31.222 -               Method::name_and_sig_as_C_string(Klass::cast(k()), name, signature));
  31.223 +               Method::name_and_sig_as_C_string(k(), name, signature));
  31.224        THROW_MSG_(vmSymbols::java_lang_NoSuchMethodError(), st.as_string(), false);
  31.225      }
  31.226    }
  31.227 @@ -4059,7 +4059,7 @@
  31.228      if (name == NULL || signature == NULL) {
  31.229        ResourceMark rm;
  31.230        stringStream st;
  31.231 -      st.print("Method %s.%s%s not found", Klass::cast(h_k())->external_name(), meth_name, meth_sig);
  31.232 +      st.print("Method %s.%s%s not found", h_k()->external_name(), meth_name, meth_sig);
  31.233        // Must return negative value on failure
  31.234        THROW_MSG_(vmSymbols::java_lang_NoSuchMethodError(), st.as_string(), -1);
  31.235      }
  31.236 @@ -4085,7 +4085,7 @@
  31.237  #endif /* USDT2 */
  31.238    Klass* k   = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
  31.239    //%note jni_2
  31.240 -  if (Klass::cast(k)->oop_is_instance()) {
  31.241 +  if (k->oop_is_instance()) {
  31.242      for (int index = 0; index < InstanceKlass::cast(k)->methods()->length(); index++) {
  31.243        Method* m = InstanceKlass::cast(k)->methods()->at(index);
  31.244        if (m->is_native()) {
    32.1 --- a/src/share/vm/prims/jniCheck.cpp	Fri Nov 16 09:59:08 2012 +0100
    32.2 +++ b/src/share/vm/prims/jniCheck.cpp	Fri Nov 16 09:19:12 2012 -0500
    32.3 @@ -383,7 +383,7 @@
    32.4    ASSERT_OOPS_ALLOWED;
    32.5    assert(klass != NULL, "klass argument must have a value");
    32.6  
    32.7 -  if (!Klass::cast(klass)->oop_is_instance() ||
    32.8 +  if (!klass->oop_is_instance() ||
    32.9        !InstanceKlass::cast(klass)->is_subclass_of(SystemDictionary::Throwable_klass())) {
   32.10      ReportJNIFatalError(thr, fatal_class_not_a_throwable_class);
   32.11    }
    33.1 --- a/src/share/vm/prims/jvm.cpp	Fri Nov 16 09:59:08 2012 +0100
    33.2 +++ b/src/share/vm/prims/jvm.cpp	Fri Nov 16 09:19:12 2012 -0500
    33.3 @@ -305,7 +305,7 @@
    33.4    assert(s->is_oop(), "JVM_ArrayCopy: src not an oop");
    33.5    assert(d->is_oop(), "JVM_ArrayCopy: dst not an oop");
    33.6    // Do copy
    33.7 -  Klass::cast(s->klass())->copy_array(s, src_pos, d, dst_pos, length, thread);
    33.8 +  s->klass()->copy_array(s, src_pos, d, dst_pos, length, thread);
    33.9  JVM_END
   33.10  
   33.11  
   33.12 @@ -675,7 +675,7 @@
   33.13  JVM_ENTRY(jclass, JVM_GetCallerClass(JNIEnv* env, int depth))
   33.14    JVMWrapper("JVM_GetCallerClass");
   33.15    Klass* k = thread->security_get_caller_class(depth);
   33.16 -  return (k == NULL) ? NULL : (jclass) JNIHandles::make_local(env, Klass::cast(k)->java_mirror());
   33.17 +  return (k == NULL) ? NULL : (jclass) JNIHandles::make_local(env, k->java_mirror());
   33.18  JVM_END
   33.19  
   33.20  
   33.21 @@ -739,7 +739,7 @@
   33.22    if (TraceClassResolution) {
   33.23      trace_class_resolution(k);
   33.24    }
   33.25 -  return (jclass) JNIHandles::make_local(env, Klass::cast(k)->java_mirror());
   33.26 +  return (jclass) JNIHandles::make_local(env, k->java_mirror());
   33.27  JVM_END
   33.28  
   33.29  JVM_ENTRY(jclass, JVM_FindClassFromClassLoader(JNIEnv* env, const char* name,
   33.30 @@ -785,8 +785,8 @@
   33.31    oop class_loader = NULL;
   33.32    oop protection_domain = NULL;
   33.33    if (from_class != NULL) {
   33.34 -    class_loader = Klass::cast(from_class)->class_loader();
   33.35 -    protection_domain = Klass::cast(from_class)->protection_domain();
   33.36 +    class_loader = from_class->class_loader();
   33.37 +    protection_domain = from_class->protection_domain();
   33.38    }
   33.39    Handle h_loader(THREAD, class_loader);
   33.40    Handle h_prot  (THREAD, protection_domain);
   33.41 @@ -798,11 +798,11 @@
   33.42      ResourceMark rm;
   33.43      oop from_mirror = JNIHandles::resolve_non_null(from);
   33.44      Klass* from_class = java_lang_Class::as_Klass(from_mirror);
   33.45 -    const char * from_name = Klass::cast(from_class)->external_name();
   33.46 +    const char * from_name = from_class->external_name();
   33.47  
   33.48      oop mirror = JNIHandles::resolve_non_null(result);
   33.49      Klass* to_class = java_lang_Class::as_Klass(mirror);
   33.50 -    const char * to = Klass::cast(to_class)->external_name();
   33.51 +    const char * to = to_class->external_name();
   33.52      tty->print("RESOLVE %s %s (verification)\n", from_name, to);
   33.53    }
   33.54  
   33.55 @@ -875,7 +875,7 @@
   33.56      trace_class_resolution(k);
   33.57    }
   33.58  
   33.59 -  return (jclass) JNIHandles::make_local(env, Klass::cast(k)->java_mirror());
   33.60 +  return (jclass) JNIHandles::make_local(env, k->java_mirror());
   33.61  }
   33.62  
   33.63  
   33.64 @@ -936,7 +936,7 @@
   33.65                                                                CHECK_NULL);
   33.66  
   33.67    return (k == NULL) ? NULL :
   33.68 -            (jclass) JNIHandles::make_local(env, Klass::cast(k)->java_mirror());
   33.69 +            (jclass) JNIHandles::make_local(env, k->java_mirror());
   33.70  JVM_END
   33.71  
   33.72  
   33.73 @@ -954,7 +954,7 @@
   33.74      // Consider caching interned string in Klass
   33.75      Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
   33.76      assert(k->is_klass(), "just checking");
   33.77 -    name = Klass::cast(k)->external_name();
   33.78 +    name = k->external_name();
   33.79    }
   33.80    oop result = StringTable::intern((char*) name, CHECK_NULL);
   33.81    return (jstring) JNIHandles::make_local(env, result);
   33.82 @@ -991,12 +991,12 @@
   33.83      // Regular instance klass, fill in all local interfaces
   33.84      for (int index = 0; index < size; index++) {
   33.85        Klass* k = InstanceKlass::cast(klass())->local_interfaces()->at(index);
   33.86 -      result->obj_at_put(index, Klass::cast(k)->java_mirror());
   33.87 +      result->obj_at_put(index, k->java_mirror());
   33.88      }
   33.89    } else {
   33.90      // All arrays implement java.lang.Cloneable and java.io.Serializable
   33.91 -    result->obj_at_put(0, Klass::cast(SystemDictionary::Cloneable_klass())->java_mirror());
   33.92 -    result->obj_at_put(1, Klass::cast(SystemDictionary::Serializable_klass())->java_mirror());
   33.93 +    result->obj_at_put(0, SystemDictionary::Cloneable_klass()->java_mirror());
   33.94 +    result->obj_at_put(1, SystemDictionary::Serializable_klass()->java_mirror());
   33.95    }
   33.96    return (jobjectArray) JNIHandles::make_local(env, result());
   33.97  JVM_END
   33.98 @@ -1008,7 +1008,7 @@
   33.99      return NULL;
  33.100    }
  33.101    Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  33.102 -  oop loader = Klass::cast(k)->class_loader();
  33.103 +  oop loader = k->class_loader();
  33.104    return JNIHandles::make_local(env, loader);
  33.105  JVM_END
  33.106  
  33.107 @@ -1020,8 +1020,8 @@
  33.108      return JNI_FALSE;
  33.109    }
  33.110    Klass* k = java_lang_Class::as_Klass(mirror);
  33.111 -  jboolean result = Klass::cast(k)->is_interface();
  33.112 -  assert(!result || Klass::cast(k)->oop_is_instance(),
  33.113 +  jboolean result = k->is_interface();
  33.114 +  assert(!result || k->oop_is_instance(),
  33.115           "all interfaces are instance types");
  33.116    // The compiler intrinsic for isInterface tests the
  33.117    // Klass::_access_flags bits in the same way.
  33.118 @@ -1039,7 +1039,7 @@
  33.119  
  33.120    Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  33.121    objArrayOop signers = NULL;
  33.122 -  if (Klass::cast(k)->oop_is_instance()) {
  33.123 +  if (k->oop_is_instance()) {
  33.124      signers = InstanceKlass::cast(k)->signers();
  33.125    }
  33.126  
  33.127 @@ -1066,7 +1066,7 @@
  33.128      // Signers are only set once, ClassLoader.java, and thus shouldn't
  33.129      // be called with an array.  Only the bootstrap loader creates arrays.
  33.130      Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  33.131 -    if (Klass::cast(k)->oop_is_instance()) {
  33.132 +    if (k->oop_is_instance()) {
  33.133        InstanceKlass::cast(k)->set_signers(objArrayOop(JNIHandles::resolve(signers)));
  33.134      }
  33.135    }
  33.136 @@ -1085,7 +1085,7 @@
  33.137    }
  33.138  
  33.139    Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
  33.140 -  return (jobject) JNIHandles::make_local(env, Klass::cast(k)->protection_domain());
  33.141 +  return (jobject) JNIHandles::make_local(env, k->protection_domain());
  33.142  JVM_END
  33.143  
  33.144  
  33.145 @@ -1101,7 +1101,7 @@
  33.146      Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
  33.147  
  33.148      // cls won't be an array, as this called only from ClassLoader.defineClass
  33.149 -    if (Klass::cast(k)->oop_is_instance()) {
  33.150 +    if (k->oop_is_instance()) {
  33.151        oop pd = JNIHandles::resolve(protection_domain);
  33.152        assert(pd == NULL || pd->is_oop(), "just checking");
  33.153        InstanceKlass::cast(k)->set_protection_domain(pd);
  33.154 @@ -1124,7 +1124,7 @@
  33.155    Handle object (THREAD, JNIHandles::resolve(action));
  33.156  
  33.157    // get run() method
  33.158 -  Method* m_oop = Klass::cast(object->klass())->uncached_lookup_method(
  33.159 +  Method* m_oop = object->klass()->uncached_lookup_method(
  33.160                                             vmSymbols::run_method_name(),
  33.161                                             vmSymbols::void_object_signature());
  33.162    methodHandle m (THREAD, m_oop);
  33.163 @@ -1267,7 +1267,7 @@
  33.164  JVM_QUICK_ENTRY(jboolean, JVM_IsArrayClass(JNIEnv *env, jclass cls))
  33.165    JVMWrapper("JVM_IsArrayClass");
  33.166    Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  33.167 -  return (k != NULL) && Klass::cast(k)->oop_is_array() ? true : false;
  33.168 +  return (k != NULL) && k->oop_is_array() ? true : false;
  33.169  JVM_END
  33.170  
  33.171  
  33.172 @@ -1293,7 +1293,7 @@
  33.173      return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC;
  33.174    }
  33.175  
  33.176 -  Klass* k = Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)));
  33.177 +  Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  33.178    debug_only(int computed_modifiers = k->compute_modifier_flags(CHECK_0));
  33.179    assert(k->modifier_flags() == computed_modifiers, "modifiers cache is OK");
  33.180    return k->modifier_flags();
  33.181 @@ -1308,7 +1308,7 @@
  33.182    // of an InstanceKlass
  33.183  
  33.184    if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
  33.185 -      ! Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_instance()) {
  33.186 +      ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_instance()) {
  33.187      oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
  33.188      return (jobjectArray)JNIHandles::make_local(env, result);
  33.189    }
  33.190 @@ -1372,7 +1372,7 @@
  33.191  {
  33.192    // ofClass is a reference to a java_lang_Class object.
  33.193    if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
  33.194 -      ! Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_instance()) {
  33.195 +      ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_instance()) {
  33.196      return NULL;
  33.197    }
  33.198  
  33.199 @@ -1382,7 +1382,7 @@
  33.200                            )->compute_enclosing_class(&inner_is_member, CHECK_NULL);
  33.201    if (outer_klass == NULL)  return NULL;  // already a top-level class
  33.202    if (!inner_is_member)  return NULL;     // an anonymous class (inside a method)
  33.203 -  return (jclass) JNIHandles::make_local(env, Klass::cast(outer_klass)->java_mirror());
  33.204 +  return (jclass) JNIHandles::make_local(env, outer_klass->java_mirror());
  33.205  }
  33.206  JVM_END
  33.207  
  33.208 @@ -1452,7 +1452,7 @@
  33.209    // Return null for arrays and primatives
  33.210    if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
  33.211      Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
  33.212 -    if (Klass::cast(k)->oop_is_instance()) {
  33.213 +    if (k->oop_is_instance()) {
  33.214        Symbol* sym = InstanceKlass::cast(k)->generic_signature();
  33.215        if (sym == NULL) return NULL;
  33.216        Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
  33.217 @@ -1470,7 +1470,7 @@
  33.218    // Return null for arrays and primitives
  33.219    if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
  33.220      Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
  33.221 -    if (Klass::cast(k)->oop_is_instance()) {
  33.222 +    if (k->oop_is_instance()) {
  33.223        typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL);
  33.224        return (jbyteArray) JNIHandles::make_local(env, a);
  33.225      }
  33.226 @@ -1583,7 +1583,7 @@
  33.227  
  33.228    // Exclude primitive types and array types
  33.229    if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
  33.230 -      Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_array()) {
  33.231 +      java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_array()) {
  33.232      // Return empty array
  33.233      oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL);
  33.234      return (jobjectArray) JNIHandles::make_local(env, res);
  33.235 @@ -1646,7 +1646,7 @@
  33.236  
  33.237    // Exclude primitive types and array types
  33.238    if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass))
  33.239 -      || Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_array()) {
  33.240 +      || java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_array()) {
  33.241      // Return empty array
  33.242      oop res = oopFactory::new_objArray(SystemDictionary::reflect_Method_klass(), 0, CHECK_NULL);
  33.243      return (jobjectArray) JNIHandles::make_local(env, res);
  33.244 @@ -1698,7 +1698,7 @@
  33.245  
  33.246    // Exclude primitive types and array types
  33.247    if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass))
  33.248 -      || Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_array()) {
  33.249 +      || java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_array()) {
  33.250      // Return empty array
  33.251      oop res = oopFactory::new_objArray(SystemDictionary::reflect_Constructor_klass(), 0 , CHECK_NULL);
  33.252      return (jobjectArray) JNIHandles::make_local(env, res);
  33.253 @@ -1751,7 +1751,7 @@
  33.254      return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC;
  33.255    }
  33.256  
  33.257 -  Klass* k = Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)));
  33.258 +  Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  33.259    return k->access_flags().as_int() & JVM_ACC_WRITTEN_FLAGS;
  33.260  }
  33.261  JVM_END
  33.262 @@ -1767,7 +1767,7 @@
  33.263    // Return null for primitives and arrays
  33.264    if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
  33.265      Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  33.266 -    if (Klass::cast(k)->oop_is_instance()) {
  33.267 +    if (k->oop_is_instance()) {
  33.268        instanceKlassHandle k_h(THREAD, k);
  33.269        Handle jcp = sun_reflect_ConstantPool::create(CHECK_NULL);
  33.270        sun_reflect_ConstantPool::set_cp(jcp(), k_h->constants());
  33.271 @@ -2043,12 +2043,12 @@
  33.272    if (java_lang_Class::is_primitive(r)) return false;
  33.273  
  33.274    Klass* k = java_lang_Class::as_Klass(r);
  33.275 -  assert(Klass::cast(k)->oop_is_instance(), "must be an instance klass");
  33.276 -  if (! Klass::cast(k)->oop_is_instance()) return false;
  33.277 +  assert(k->oop_is_instance(), "must be an instance klass");
  33.278 +  if (! k->oop_is_instance()) return false;
  33.279  
  33.280    ResourceMark rm(THREAD);
  33.281 -  const char* name = Klass::cast(k)->name()->as_C_string();
  33.282 -  bool system_class = Klass::cast(k)->class_loader() == NULL;
  33.283 +  const char* name = k->name()->as_C_string();
  33.284 +  bool system_class = k->class_loader() == NULL;
  33.285    return JavaAssertions::enabled(name, system_class);
  33.286  
  33.287  JVM_END
  33.288 @@ -2079,7 +2079,7 @@
  33.289    JVMWrapper("JVM_GetClassNameUTF");
  33.290    Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  33.291    k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
  33.292 -  return Klass::cast(k)->name()->as_utf8();
  33.293 +  return k->name()->as_utf8();
  33.294  JVM_END
  33.295  
  33.296  
  33.297 @@ -2089,7 +2089,7 @@
  33.298    k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
  33.299    // types will have length zero if this is not an InstanceKlass
  33.300    // (length is determined by call to JVM_GetClassCPEntriesCount)
  33.301 -  if (Klass::cast(k)->oop_is_instance()) {
  33.302 +  if (k->oop_is_instance()) {
  33.303      ConstantPool* cp = InstanceKlass::cast(k)->constants();
  33.304      for (int index = cp->length() - 1; index >= 0; index--) {
  33.305        constantTag tag = cp->tag_at(index);
  33.306 @@ -2103,7 +2103,7 @@
  33.307    JVMWrapper("JVM_GetClassCPEntriesCount");
  33.308    Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  33.309    k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
  33.310 -  if (!Klass::cast(k)->oop_is_instance())
  33.311 +  if (!k->oop_is_instance())
  33.312      return 0;
  33.313    return InstanceKlass::cast(k)->constants()->length();
  33.314  JVM_END
  33.315 @@ -2113,7 +2113,7 @@
  33.316    JVMWrapper("JVM_GetClassFieldsCount");
  33.317    Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  33.318    k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
  33.319 -  if (!Klass::cast(k)->oop_is_instance())
  33.320 +  if (!k->oop_is_instance())
  33.321      return 0;
  33.322    return InstanceKlass::cast(k)->java_fields_count();
  33.323  JVM_END
  33.324 @@ -2123,7 +2123,7 @@
  33.325    JVMWrapper("JVM_GetClassMethodsCount");
  33.326    Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  33.327    k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
  33.328 -  if (!Klass::cast(k)->oop_is_instance())
  33.329 +  if (!k->oop_is_instance())
  33.330      return 0;
  33.331    return InstanceKlass::cast(k)->methods()->length();
  33.332  JVM_END
  33.333 @@ -3123,7 +3123,7 @@
  33.334    // Fill in mirrors corresponding to method holders
  33.335    int index = 0;
  33.336    while (first != NULL) {
  33.337 -    result->obj_at_put(index++, Klass::cast(first->klass())->java_mirror());
  33.338 +    result->obj_at_put(index++, first->klass()->java_mirror());
  33.339      first = first->next;
  33.340    }
  33.341    assert(index == depth, "just checking");
  33.342 @@ -3217,7 +3217,7 @@
  33.343  
  33.344    if (access.is_protected()) {
  33.345      // See if current_class is a subclass of field_class
  33.346 -    if (Klass::cast(current_class)->is_subclass_of(field_class)) {
  33.347 +    if (current_class->is_subclass_of(field_class)) {
  33.348        return true;
  33.349      }
  33.350    }
  33.351 @@ -3241,8 +3241,8 @@
  33.352    }
  33.353  
  33.354    // Arrays not allowed here, must use JVM_AllocateNewArray
  33.355 -  if (Klass::cast(java_lang_Class::as_Klass(curr_mirror))->oop_is_array() ||
  33.356 -      Klass::cast(java_lang_Class::as_Klass(init_mirror))->oop_is_array()) {
  33.357 +  if (java_lang_Class::as_Klass(curr_mirror)->oop_is_array() ||
  33.358 +      java_lang_Class::as_Klass(init_mirror)->oop_is_array()) {
  33.359      ResourceMark rm(THREAD);
  33.360      THROW_0(vmSymbols::java_lang_InvalidClassException());
  33.361    }
  33.362 @@ -3264,7 +3264,7 @@
  33.363    if (m.is_null()) {
  33.364      ResourceMark rm(THREAD);
  33.365      THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(),
  33.366 -                Method::name_and_sig_as_C_string(Klass::cast(init_klass()),
  33.367 +                Method::name_and_sig_as_C_string(init_klass(),
  33.368                                            vmSymbols::object_initializer_name(),
  33.369                                            vmSymbols::void_method_signature()));
  33.370    }
  33.371 @@ -4245,7 +4245,7 @@
  33.372      return NULL;
  33.373    }
  33.374    Klass* k = java_lang_Class::as_Klass(mirror());
  33.375 -  if (!Klass::cast(k)->oop_is_instance()) {
  33.376 +  if (!k->oop_is_instance()) {
  33.377      return NULL;
  33.378    }
  33.379    instanceKlassHandle ik_h(THREAD, k);
  33.380 @@ -4256,7 +4256,7 @@
  33.381    objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::Object_klass(), 3, CHECK_NULL);
  33.382    objArrayHandle dest(THREAD, dest_o);
  33.383    Klass* enc_k = ik_h->constants()->klass_at(encl_method_class_idx, CHECK_NULL);
  33.384 -  dest->obj_at_put(0, Klass::cast(enc_k)->java_mirror());
  33.385 +  dest->obj_at_put(0, enc_k->java_mirror());
  33.386    int encl_method_method_idx = ik_h->enclosing_method_method_index();
  33.387    if (encl_method_method_idx != 0) {
  33.388      Symbol* sym = ik_h->constants()->symbol_at(
    34.1 --- a/src/share/vm/prims/jvmtiClassFileReconstituter.cpp	Fri Nov 16 09:59:08 2012 +0100
    34.2 +++ b/src/share/vm/prims/jvmtiClassFileReconstituter.cpp	Fri Nov 16 09:19:12 2012 -0500
    34.3 @@ -228,7 +228,7 @@
    34.4  
    34.5    write_attribute_name_index("Code");
    34.6    write_u4(size);
    34.7 -  write_u2(method->max_stack());
    34.8 +  write_u2(method->verifier_max_stack());
    34.9    write_u2(method->max_locals());
   34.10    write_u4(code_size);
   34.11    copy_bytecodes(method, (unsigned char*)writeable_address(code_size));
    35.1 --- a/src/share/vm/prims/jvmtiEnv.cpp	Fri Nov 16 09:59:08 2012 +0100
    35.2 +++ b/src/share/vm/prims/jvmtiEnv.cpp	Fri Nov 16 09:19:12 2012 -0500
    35.3 @@ -2116,7 +2116,7 @@
    35.4        result[0] = tchar;
    35.5        result[1] = '\0';
    35.6      } else {
    35.7 -      const char* class_sig = Klass::cast(k)->signature_name();
    35.8 +      const char* class_sig = k->signature_name();
    35.9        result = (char *) jvmtiMalloc(strlen(class_sig)+1);
   35.10        strcpy(result, class_sig);
   35.11      }
   35.12 @@ -2124,7 +2124,7 @@
   35.13    }
   35.14    if (generic_ptr != NULL) {
   35.15      *generic_ptr = NULL;
   35.16 -    if (!isPrimitive && Klass::cast(k)->oop_is_instance()) {
   35.17 +    if (!isPrimitive && k->oop_is_instance()) {
   35.18        Symbol* soo = InstanceKlass::cast(k)->generic_signature();
   35.19        if (soo != NULL) {
   35.20          const char *gen_sig = soo->as_C_string();
   35.21 @@ -2155,7 +2155,7 @@
   35.22    } else {
   35.23      Klass* k = java_lang_Class::as_Klass(k_mirror);
   35.24      NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
   35.25 -    result = Klass::cast(k)->jvmti_class_status();
   35.26 +    result = k->jvmti_class_status();
   35.27    }
   35.28    *status_ptr = result;
   35.29  
   35.30 @@ -2173,7 +2173,7 @@
   35.31    Klass* k_klass = java_lang_Class::as_Klass(k_mirror);
   35.32    NULL_CHECK(k_klass, JVMTI_ERROR_INVALID_CLASS);
   35.33  
   35.34 -  if (!Klass::cast(k_klass)->oop_is_instance()) {
   35.35 +  if (!k_klass->oop_is_instance()) {
   35.36      return JVMTI_ERROR_ABSENT_INFORMATION;
   35.37    }
   35.38  
   35.39 @@ -2200,7 +2200,7 @@
   35.40    if (!java_lang_Class::is_primitive(k_mirror)) {
   35.41      Klass* k = java_lang_Class::as_Klass(k_mirror);
   35.42      NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
   35.43 -    result = Klass::cast(k)->compute_modifier_flags(current_thread);
   35.44 +    result = k->compute_modifier_flags(current_thread);
   35.45      JavaThread* THREAD = current_thread; // pass to macros
   35.46      if (HAS_PENDING_EXCEPTION) {
   35.47        CLEAR_PENDING_EXCEPTION;
   35.48 @@ -2208,7 +2208,7 @@
   35.49      };
   35.50  
   35.51      // Reset the deleted  ACC_SUPER bit ( deleted in compute_modifier_flags()).
   35.52 -    if(Klass::cast(k)->is_super()) {
   35.53 +    if(k->is_super()) {
   35.54        result |= JVM_ACC_SUPER;
   35.55      }
   35.56    } else {
   35.57 @@ -2237,11 +2237,11 @@
   35.58    NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
   35.59  
   35.60    // Return CLASS_NOT_PREPARED error as per JVMTI spec.
   35.61 -  if (!(Klass::cast(k)->jvmti_class_status() & (JVMTI_CLASS_STATUS_PREPARED|JVMTI_CLASS_STATUS_ARRAY) )) {
   35.62 +  if (!(k->jvmti_class_status() & (JVMTI_CLASS_STATUS_PREPARED|JVMTI_CLASS_STATUS_ARRAY) )) {
   35.63      return JVMTI_ERROR_CLASS_NOT_PREPARED;
   35.64    }
   35.65  
   35.66 -  if (!Klass::cast(k)->oop_is_instance()) {
   35.67 +  if (!k->oop_is_instance()) {
   35.68      *method_count_ptr = 0;
   35.69      *methods_ptr = (jmethodID*) jvmtiMalloc(0 * sizeof(jmethodID));
   35.70      return JVMTI_ERROR_NONE;
   35.71 @@ -2293,11 +2293,11 @@
   35.72    NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
   35.73  
   35.74    // Return CLASS_NOT_PREPARED error as per JVMTI spec.
   35.75 -  if (!(Klass::cast(k)->jvmti_class_status() & (JVMTI_CLASS_STATUS_PREPARED|JVMTI_CLASS_STATUS_ARRAY) )) {
   35.76 +  if (!(k->jvmti_class_status() & (JVMTI_CLASS_STATUS_PREPARED|JVMTI_CLASS_STATUS_ARRAY) )) {
   35.77      return JVMTI_ERROR_CLASS_NOT_PREPARED;
   35.78    }
   35.79  
   35.80 -  if (!Klass::cast(k)->oop_is_instance()) {
   35.81 +  if (!k->oop_is_instance()) {
   35.82      *field_count_ptr = 0;
   35.83      *fields_ptr = (jfieldID*) jvmtiMalloc(0 * sizeof(jfieldID));
   35.84      return JVMTI_ERROR_NONE;
   35.85 @@ -2348,10 +2348,10 @@
   35.86      NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
   35.87  
   35.88      // Return CLASS_NOT_PREPARED error as per JVMTI spec.
   35.89 -    if (!(Klass::cast(k)->jvmti_class_status() & (JVMTI_CLASS_STATUS_PREPARED|JVMTI_CLASS_STATUS_ARRAY) ))
   35.90 +    if (!(k->jvmti_class_status() & (JVMTI_CLASS_STATUS_PREPARED|JVMTI_CLASS_STATUS_ARRAY) ))
   35.91        return JVMTI_ERROR_CLASS_NOT_PREPARED;
   35.92  
   35.93 -    if (!Klass::cast(k)->oop_is_instance()) {
   35.94 +    if (!k->oop_is_instance()) {
   35.95        *interface_count_ptr = 0;
   35.96        *interfaces_ptr = (jclass*) jvmtiMalloc(0 * sizeof(jclass));
   35.97        return JVMTI_ERROR_NONE;
   35.98 @@ -2363,8 +2363,8 @@
   35.99      for (int i_index = 0; i_index < result_length; i_index += 1) {
  35.100        Klass* klass_at = interface_list->at(i_index);
  35.101        assert(klass_at->is_klass(), "interfaces must be Klass*s");
  35.102 -      assert(Klass::cast(klass_at)->is_interface(), "interfaces must be interfaces");
  35.103 -      oop mirror_at = Klass::cast(klass_at)->java_mirror();
  35.104 +      assert(klass_at->is_interface(), "interfaces must be interfaces");
  35.105 +      oop mirror_at = klass_at->java_mirror();
  35.106        Handle handle_at = Handle(current_thread, mirror_at);
  35.107        result_list[i_index] = (jclass) jni_reference(handle_at);
  35.108      }
  35.109 @@ -2468,7 +2468,7 @@
  35.110      bool result = false;
  35.111      if (!java_lang_Class::is_primitive(k_mirror)) {
  35.112        Klass* k = java_lang_Class::as_Klass(k_mirror);
  35.113 -      if (k != NULL && Klass::cast(k)->is_interface()) {
  35.114 +      if (k != NULL && k->is_interface()) {
  35.115          result = true;
  35.116        }
  35.117      }
  35.118 @@ -2487,7 +2487,7 @@
  35.119      bool result = false;
  35.120      if (!java_lang_Class::is_primitive(k_mirror)) {
  35.121        Klass* k = java_lang_Class::as_Klass(k_mirror);
  35.122 -      if (k != NULL && Klass::cast(k)->oop_is_array()) {
  35.123 +      if (k != NULL && k->oop_is_array()) {
  35.124          result = true;
  35.125        }
  35.126      }
  35.127 @@ -2512,7 +2512,7 @@
  35.128      Klass* k = java_lang_Class::as_Klass(k_mirror);
  35.129      NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
  35.130  
  35.131 -    oop result_oop = Klass::cast(k)->class_loader();
  35.132 +    oop result_oop = k->class_loader();
  35.133      if (result_oop == NULL) {
  35.134        *classloader_ptr = (jclass) jni_reference(Handle());
  35.135        return JVMTI_ERROR_NONE;
  35.136 @@ -2535,7 +2535,7 @@
  35.137      }
  35.138      Klass* k = java_lang_Class::as_Klass(k_mirror);
  35.139      NULL_CHECK(k, JVMTI_ERROR_INVALID_CLASS);
  35.140 -    if (!Klass::cast(k)->oop_is_instance()) {
  35.141 +    if (!k->oop_is_instance()) {
  35.142        return JVMTI_ERROR_ABSENT_INFORMATION;
  35.143      }
  35.144      char* sde = InstanceKlass::cast(k)->source_debug_extension();
    36.1 --- a/src/share/vm/prims/jvmtiEnvBase.cpp	Fri Nov 16 09:59:08 2012 +0100
    36.2 +++ b/src/share/vm/prims/jvmtiEnvBase.cpp	Fri Nov 16 09:19:12 2012 -0500
    36.3 @@ -590,7 +590,7 @@
    36.4  jclass
    36.5  JvmtiEnvBase::get_jni_class_non_null(Klass* k) {
    36.6    assert(k != NULL, "k != NULL");
    36.7 -  return (jclass)jni_reference(Klass::cast(k)->java_mirror());
    36.8 +  return (jclass)jni_reference(k->java_mirror());
    36.9  }
   36.10  
   36.11  #ifndef JVMTI_KERNEL
   36.12 @@ -1365,7 +1365,7 @@
   36.13      // Method return type signature.
   36.14      char* ty_sign = 1 + strchr(signature->as_C_string(), ')');
   36.15  
   36.16 -    if (!VM_GetOrSetLocal::is_assignable(ty_sign, Klass::cast(ob_kh()), current_thread)) {
   36.17 +    if (!VM_GetOrSetLocal::is_assignable(ty_sign, ob_kh(), current_thread)) {
   36.18        return JVMTI_ERROR_TYPE_MISMATCH;
   36.19      }
   36.20      *ret_ob_h = ob_h;
    37.1 --- a/src/share/vm/prims/jvmtiExport.cpp	Fri Nov 16 09:59:08 2012 +0100
    37.2 +++ b/src/share/vm/prims/jvmtiExport.cpp	Fri Nov 16 09:19:12 2012 -0500
    37.3 @@ -196,7 +196,7 @@
    37.4    jobject to_jobject(oop obj) { return JNIHandles::make_local(_thread,obj); }
    37.5  #endif
    37.6  
    37.7 -  jclass to_jclass(Klass* klass) { return (klass == NULL ? NULL : (jclass)to_jobject(Klass::cast(klass)->java_mirror())); }
    37.8 +  jclass to_jclass(Klass* klass) { return (klass == NULL ? NULL : (jclass)to_jobject(klass->java_mirror())); }
    37.9  
   37.10    jmethodID to_jmethodID(methodHandle method) { return method->jmethod_id(); }
   37.11  
   37.12 @@ -920,7 +920,7 @@
   37.13      if (ets->is_enabled(JVMTI_EVENT_CLASS_LOAD)) {
   37.14        EVT_TRACE(JVMTI_EVENT_CLASS_LOAD, ("JVMTI [%s] Evt Class Load sent %s",
   37.15                                           JvmtiTrace::safe_get_thread_name(thread),
   37.16 -                                         kh()==NULL? "NULL" : Klass::cast(kh())->external_name() ));
   37.17 +                                         kh()==NULL? "NULL" : kh()->external_name() ));
   37.18  
   37.19        JvmtiEnv *env = ets->get_env();
   37.20        JvmtiClassEventMark jem(thread, kh());
   37.21 @@ -949,7 +949,7 @@
   37.22      if (ets->is_enabled(JVMTI_EVENT_CLASS_PREPARE)) {
   37.23        EVT_TRACE(JVMTI_EVENT_CLASS_PREPARE, ("JVMTI [%s] Evt Class Prepare sent %s",
   37.24                                              JvmtiTrace::safe_get_thread_name(thread),
   37.25 -                                            kh()==NULL? "NULL" : Klass::cast(kh())->external_name() ));
   37.26 +                                            kh()==NULL? "NULL" : kh()->external_name() ));
   37.27  
   37.28        JvmtiEnv *env = ets->get_env();
   37.29        JvmtiClassEventMark jem(thread, kh());
   37.30 @@ -979,12 +979,12 @@
   37.31      for (JvmtiEnv* env = it.first(); env != NULL; env = it.next(env)) {
   37.32        if (env->is_enabled((jvmtiEvent)EXT_EVENT_CLASS_UNLOAD)) {
   37.33          EVT_TRACE(EXT_EVENT_CLASS_UNLOAD, ("JVMTI [?] Evt Class Unload sent %s",
   37.34 -                  kh()==NULL? "NULL" : Klass::cast(kh())->external_name() ));
   37.35 +                  kh()==NULL? "NULL" : kh()->external_name() ));
   37.36  
   37.37          // do everything manually, since this is a proxy - needs special care
   37.38          JNIEnv* jni_env = real_thread->jni_environment();
   37.39          jthread jt = (jthread)JNIHandles::make_local(real_thread, real_thread->threadObj());
   37.40 -        jclass jk = (jclass)JNIHandles::make_local(real_thread, Klass::cast(kh())->java_mirror());
   37.41 +        jclass jk = (jclass)JNIHandles::make_local(real_thread, kh()->java_mirror());
   37.42  
   37.43          // Before we call the JVMTI agent, we have to set the state in the
   37.44          // thread for which we are proxying.
   37.45 @@ -2121,7 +2121,7 @@
   37.46      if (env->is_enabled(JVMTI_EVENT_VM_OBJECT_ALLOC)) {
   37.47        EVT_TRACE(JVMTI_EVENT_VM_OBJECT_ALLOC, ("JVMTI [%s] Evt vmobject alloc sent %s",
   37.48                                           JvmtiTrace::safe_get_thread_name(thread),
   37.49 -                                         object==NULL? "NULL" : Klass::cast(java_lang_Class::as_Klass(object))->external_name()));
   37.50 +                                         object==NULL? "NULL" : java_lang_Class::as_Klass(object)->external_name()));
   37.51  
   37.52        JvmtiVMObjectAllocEventMark jem(thread, h());
   37.53        JvmtiJavaThreadEventTransition jet(thread);
    38.1 --- a/src/share/vm/prims/jvmtiGetLoadedClasses.cpp	Fri Nov 16 09:59:08 2012 +0100
    38.2 +++ b/src/share/vm/prims/jvmtiGetLoadedClasses.cpp	Fri Nov 16 09:19:12 2012 -0500
    38.3 @@ -169,7 +169,7 @@
    38.4    static void increment(Klass* k) {
    38.5      JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this();
    38.6      if (that->get_initiatingLoader() == NULL) {
    38.7 -      for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) {
    38.8 +      for (Klass* l = k; l != NULL; l = l->array_klass_or_null()) {
    38.9          that->set_count(that->get_count() + 1);
   38.10        }
   38.11      } else if (k != NULL) {
   38.12 @@ -182,7 +182,7 @@
   38.13      JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this();
   38.14      oop class_loader = loader_data->class_loader();
   38.15      if (class_loader == JNIHandles::resolve(that->get_initiatingLoader())) {
   38.16 -      for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) {
   38.17 +      for (Klass* l = k; l != NULL; l = l->array_klass_or_null()) {
   38.18          that->set_count(that->get_count() + 1);
   38.19        }
   38.20      }
   38.21 @@ -200,14 +200,14 @@
   38.22      JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this();
   38.23      if (that->available()) {
   38.24        if (that->get_initiatingLoader() == NULL) {
   38.25 -        for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) {
   38.26 -          oop mirror = Klass::cast(l)->java_mirror();
   38.27 +        for (Klass* l = k; l != NULL; l = l->array_klass_or_null()) {
   38.28 +          oop mirror = l->java_mirror();
   38.29            that->set_element(that->get_index(), mirror);
   38.30            that->set_index(that->get_index() + 1);
   38.31          }
   38.32        } else if (k != NULL) {
   38.33          // if initiating loader not null, just include the instance with 1 dimension
   38.34 -        oop mirror = Klass::cast(k)->java_mirror();
   38.35 +        oop mirror = k->java_mirror();
   38.36          that->set_element(that->get_index(), mirror);
   38.37          that->set_index(that->get_index() + 1);
   38.38        }
   38.39 @@ -219,8 +219,8 @@
   38.40      if (that->available()) {
   38.41        oop class_loader = loader_data->class_loader();
   38.42        if (class_loader == JNIHandles::resolve(that->get_initiatingLoader())) {
   38.43 -        for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) {
   38.44 -          oop mirror = Klass::cast(l)->java_mirror();
   38.45 +        for (Klass* l = k; l != NULL; l = l->array_klass_or_null()) {
   38.46 +          oop mirror = l->java_mirror();
   38.47            that->set_element(that->get_index(), mirror);
   38.48            that->set_index(that->get_index() + 1);
   38.49          }
   38.50 @@ -234,7 +234,7 @@
   38.51    static void increment_for_basic_type_arrays(Klass* k) {
   38.52      JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this();
   38.53      assert(that != NULL, "no JvmtiGetLoadedClassesClosure");
   38.54 -    for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) {
   38.55 +    for (Klass* l = k; l != NULL; l = l->array_klass_or_null()) {
   38.56        that->set_count(that->get_count() + 1);
   38.57      }
   38.58    }
   38.59 @@ -244,8 +244,8 @@
   38.60      JvmtiGetLoadedClassesClosure* that = JvmtiGetLoadedClassesClosure::get_this();
   38.61      assert(that != NULL, "no JvmtiGetLoadedClassesClosure");
   38.62      assert(that->available(), "no list");
   38.63 -    for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) {
   38.64 -      oop mirror = Klass::cast(l)->java_mirror();
   38.65 +    for (Klass* l = k; l != NULL; l = l->array_klass_or_null()) {
   38.66 +      oop mirror = l->java_mirror();
   38.67        that->set_element(that->get_index(), mirror);
   38.68        that->set_index(that->get_index() + 1);
   38.69      }
    39.1 --- a/src/share/vm/prims/jvmtiImpl.cpp	Fri Nov 16 09:59:08 2012 +0100
    39.2 +++ b/src/share/vm/prims/jvmtiImpl.cpp	Fri Nov 16 09:19:12 2012 -0500
    39.3 @@ -641,14 +641,14 @@
    39.4    int super_depth = klass->super_depth();
    39.5    int idx;
    39.6    for (idx = 0; idx < super_depth; idx++) {
    39.7 -    if (Klass::cast(klass->primary_super_of_depth(idx))->name() == ty_sym) {
    39.8 +    if (klass->primary_super_of_depth(idx)->name() == ty_sym) {
    39.9        return true;
   39.10      }
   39.11    }
   39.12    // Compare secondary supers
   39.13    Array<Klass*>* sec_supers = klass->secondary_supers();
   39.14    for (idx = 0; idx < sec_supers->length(); idx++) {
   39.15 -    if (Klass::cast((Klass*) sec_supers->at(idx))->name() == ty_sym) {
   39.16 +    if (((Klass*) sec_supers->at(idx))->name() == ty_sym) {
   39.17        return true;
   39.18      }
   39.19    }
   39.20 @@ -726,7 +726,7 @@
   39.21      KlassHandle ob_kh = KlassHandle(cur_thread, obj->klass());
   39.22      NULL_CHECK(ob_kh, (_result = JVMTI_ERROR_INVALID_OBJECT, false));
   39.23  
   39.24 -    if (!is_assignable(signature, Klass::cast(ob_kh()), cur_thread)) {
   39.25 +    if (!is_assignable(signature, ob_kh(), cur_thread)) {
   39.26        _result = JVMTI_ERROR_TYPE_MISMATCH;
   39.27        return false;
   39.28      }
    40.1 --- a/src/share/vm/prims/jvmtiRedefineClasses.cpp	Fri Nov 16 09:59:08 2012 +0100
    40.2 +++ b/src/share/vm/prims/jvmtiRedefineClasses.cpp	Fri Nov 16 09:19:12 2012 -0500
    40.3 @@ -222,7 +222,7 @@
    40.4    }
    40.5    Klass* the_class_oop = java_lang_Class::as_Klass(klass_mirror);
    40.6    // classes for arrays cannot be redefined
    40.7 -  if (the_class_oop == NULL || !Klass::cast(the_class_oop)->oop_is_instance()) {
    40.8 +  if (the_class_oop == NULL || !the_class_oop->oop_is_instance()) {
    40.9      return false;
   40.10    }
   40.11    return true;
   40.12 @@ -573,8 +573,8 @@
   40.13    // Check for NULL superclass first since this might be java.lang.Object
   40.14    if (the_class->super() != scratch_class->super() &&
   40.15        (the_class->super() == NULL || scratch_class->super() == NULL ||
   40.16 -       Klass::cast(the_class->super())->name() !=
   40.17 -       Klass::cast(scratch_class->super())->name())) {
   40.18 +       the_class->super()->name() !=
   40.19 +       scratch_class->super()->name())) {
   40.20      return JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED;
   40.21    }
   40.22  
   40.23 @@ -592,8 +592,8 @@
   40.24      return JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED;
   40.25    }
   40.26    for (i = 0; i < n_intfs; i++) {
   40.27 -    if (Klass::cast(k_interfaces->at(i))->name() !=
   40.28 -        Klass::cast(k_new_interfaces->at(i))->name()) {
   40.29 +    if (k_interfaces->at(i)->name() !=
   40.30 +        k_new_interfaces->at(i)->name()) {
   40.31        return JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED;
   40.32      }
   40.33    }
   40.34 @@ -2684,7 +2684,7 @@
   40.35      // interface, then we have to call adjust_method_entries() for
   40.36      // every InstanceKlass that has an itable since there isn't a
   40.37      // subclass relationship between an interface and an InstanceKlass.
   40.38 -    if (ik->itable_length() > 0 && (Klass::cast(_the_class_oop)->is_interface()
   40.39 +    if (ik->itable_length() > 0 && (_the_class_oop->is_interface()
   40.40          || ik->is_subclass_of(_the_class_oop))) {
   40.41        // ik->itable() creates a wrapper object; rm cleans it up
   40.42        ResourceMark rm(THREAD);
   40.43 @@ -2929,7 +2929,7 @@
   40.44                                       Symbol* signature) {
   40.45      TempNewSymbol name_symbol = SymbolTable::probe(name_str, (int)name_len);
   40.46      if (name_symbol != NULL) {
   40.47 -      Method* method = Klass::cast(the_class())->lookup_method(name_symbol, signature);
   40.48 +      Method* method = the_class()->lookup_method(name_symbol, signature);
   40.49        if (method != NULL) {
   40.50          // Even if prefixed, intermediate methods must exist.
   40.51          if (method->is_native()) {
    41.1 --- a/src/share/vm/prims/jvmtiTagMap.cpp	Fri Nov 16 09:59:08 2012 +0100
    41.2 +++ b/src/share/vm/prims/jvmtiTagMap.cpp	Fri Nov 16 09:19:12 2012 -0500
    41.3 @@ -2774,7 +2774,7 @@
    41.4  // a type array references its class
    41.5  inline bool VM_HeapWalkOperation::iterate_over_type_array(oop o) {
    41.6    Klass* k = o->klass();
    41.7 -  oop mirror = Klass::cast(k)->java_mirror();
    41.8 +  oop mirror = k->java_mirror();
    41.9    if (!CallbackInvoker::report_class_reference(o, mirror)) {
   41.10      return false;
   41.11    }
   41.12 @@ -2823,7 +2823,7 @@
   41.13      // super (only if something more interesting than java.lang.Object)
   41.14      Klass* java_super = ik->java_super();
   41.15      if (java_super != NULL && java_super != SystemDictionary::Object_klass()) {
   41.16 -      oop super = Klass::cast(java_super)->java_mirror();
   41.17 +      oop super = java_super->java_mirror();
   41.18        if (!CallbackInvoker::report_superclass_reference(mirror, super)) {
   41.19          return false;
   41.20        }
   41.21 @@ -2865,7 +2865,7 @@
   41.22              // If the entry is non-null it is resolved.
   41.23              if (entry == NULL) continue;
   41.24            } else {
   41.25 -            entry = Klass::cast(pool->resolved_klass_at(i))->java_mirror();
   41.26 +            entry = pool->resolved_klass_at(i)->java_mirror();
   41.27            }
   41.28            if (!CallbackInvoker::report_constant_pool_reference(mirror, entry, (jint)i)) {
   41.29              return false;
   41.30 @@ -2879,7 +2879,7 @@
   41.31      //  but are specified by IterateOverReachableObjects and must be reported).
   41.32      Array<Klass*>* interfaces = ik->local_interfaces();
   41.33      for (i = 0; i < interfaces->length(); i++) {
   41.34 -      oop interf = Klass::cast((Klass*)interfaces->at(i))->java_mirror();
   41.35 +      oop interf = ((Klass*)interfaces->at(i))->java_mirror();
   41.36        if (interf == NULL) {
   41.37          continue;
   41.38        }
   41.39 @@ -2928,7 +2928,7 @@
   41.40  // references from the class).
   41.41  inline bool VM_HeapWalkOperation::iterate_over_object(oop o) {
   41.42    // reference to the class
   41.43 -  if (!CallbackInvoker::report_class_reference(o, Klass::cast(o->klass())->java_mirror())) {
   41.44 +  if (!CallbackInvoker::report_class_reference(o, o->klass()->java_mirror())) {
   41.45      return false;
   41.46    }
   41.47  
    42.1 --- a/src/share/vm/prims/jvmtiTrace.cpp	Fri Nov 16 09:59:08 2012 +0100
    42.2 +++ b/src/share/vm/prims/jvmtiTrace.cpp	Fri Nov 16 09:19:12 2012 -0500
    42.3 @@ -292,7 +292,7 @@
    42.4    if (k_oop == NULL) {
    42.5      return "INVALID";
    42.6    }
    42.7 -  return Klass::cast(k_oop)->external_name();
    42.8 +  return k_oop->external_name();
    42.9  }
   42.10  
   42.11  #endif /*JVMTI_TRACE */
    43.1 --- a/src/share/vm/prims/methodHandles.cpp	Fri Nov 16 09:59:08 2012 +0100
    43.2 +++ b/src/share/vm/prims/methodHandles.cpp	Fri Nov 16 09:19:12 2012 -0500
    43.3 @@ -138,7 +138,7 @@
    43.4      oop clazz  = java_lang_reflect_Method::clazz(target_oop);
    43.5      int slot   = java_lang_reflect_Method::slot(target_oop);
    43.6      Klass* k = java_lang_Class::as_Klass(clazz);
    43.7 -    if (k != NULL && Klass::cast(k)->oop_is_instance()) {
    43.8 +    if (k != NULL && k->oop_is_instance()) {
    43.9        Method* m = InstanceKlass::cast(k)->method_with_idnum(slot);
   43.10        return init_method_MemberName(mname_oop, m, true, k);
   43.11      }
   43.12 @@ -146,7 +146,7 @@
   43.13      oop clazz  = java_lang_reflect_Constructor::clazz(target_oop);
   43.14      int slot   = java_lang_reflect_Constructor::slot(target_oop);
   43.15      Klass* k = java_lang_Class::as_Klass(clazz);
   43.16 -    if (k != NULL && Klass::cast(k)->oop_is_instance()) {
   43.17 +    if (k != NULL && k->oop_is_instance()) {
   43.18        Method* m = InstanceKlass::cast(k)->method_with_idnum(slot);
   43.19        return init_method_MemberName(mname_oop, m, false, k);
   43.20      }
   43.21 @@ -187,14 +187,14 @@
   43.22    } else if (mods.is_static()) {
   43.23      flags |= IS_METHOD | (JVM_REF_invokeStatic << REFERENCE_KIND_SHIFT);
   43.24    } else if (receiver_limit != mklass &&
   43.25 -             !Klass::cast(receiver_limit)->is_subtype_of(mklass)) {
   43.26 +             !receiver_limit->is_subtype_of(mklass)) {
   43.27      return NULL;  // bad receiver limit
   43.28 -  } else if (Klass::cast(receiver_limit)->is_interface() &&
   43.29 -             Klass::cast(mklass)->is_interface()) {
   43.30 +  } else if (receiver_limit->is_interface() &&
   43.31 +             mklass->is_interface()) {
   43.32      flags |= IS_METHOD | (JVM_REF_invokeInterface << REFERENCE_KIND_SHIFT);
   43.33      receiver_limit = mklass;  // ignore passed-in limit; interfaces are interconvertible
   43.34      vmindex = klassItable::compute_itable_index(m);
   43.35 -  } else if (mklass != receiver_limit && Klass::cast(mklass)->is_interface()) {
   43.36 +  } else if (mklass != receiver_limit && mklass->is_interface()) {
   43.37      flags |= IS_METHOD | (JVM_REF_invokeVirtual << REFERENCE_KIND_SHIFT);
   43.38      // it is a miranda method, so m->vtable_index is not what we want
   43.39      ResourceMark rm;
   43.40 @@ -210,7 +210,7 @@
   43.41    java_lang_invoke_MemberName::set_flags(mname_oop,    flags);
   43.42    java_lang_invoke_MemberName::set_vmtarget(mname_oop, m);
   43.43    java_lang_invoke_MemberName::set_vmindex(mname_oop,  vmindex);   // vtable/itable index
   43.44 -  java_lang_invoke_MemberName::set_clazz(mname_oop,    Klass::cast(receiver_limit)->java_mirror());
   43.45 +  java_lang_invoke_MemberName::set_clazz(mname_oop,    receiver_limit->java_mirror());
   43.46    // Note:  name and type can be lazily computed by resolve_MemberName,
   43.47    // if Java code needs them as resolved String and MethodType objects.
   43.48    // The clazz must be eagerly stored, because it provides a GC
   43.49 @@ -258,7 +258,7 @@
   43.50    java_lang_invoke_MemberName::set_flags(mname_oop,    flags);
   43.51    java_lang_invoke_MemberName::set_vmtarget(mname_oop, vmtarget);
   43.52    java_lang_invoke_MemberName::set_vmindex(mname_oop,  vmindex);
   43.53 -  java_lang_invoke_MemberName::set_clazz(mname_oop,    Klass::cast(field_holder)->java_mirror());
   43.54 +  java_lang_invoke_MemberName::set_clazz(mname_oop,    field_holder->java_mirror());
   43.55    if (name != NULL)
   43.56      java_lang_invoke_MemberName::set_name(mname_oop,   name);
   43.57    if (type != NULL)
   43.58 @@ -299,7 +299,7 @@
   43.59    // The following test will fail spuriously during bootstrap of MethodHandle itself:
   43.60    //    if (klass != SystemDictionary::MethodHandle_klass())
   43.61    // Test the name instead:
   43.62 -  if (Klass::cast(klass)->name() != vmSymbols::java_lang_invoke_MethodHandle())
   43.63 +  if (klass->name() != vmSymbols::java_lang_invoke_MethodHandle())
   43.64      return false;
   43.65    Symbol* poly_sig = vmSymbols::object_array_object_signature();
   43.66    Method* m = InstanceKlass::cast(klass)->find_method(name, poly_sig);
   43.67 @@ -363,7 +363,7 @@
   43.68  
   43.69  vmIntrinsics::ID MethodHandles::signature_polymorphic_name_id(Klass* klass, Symbol* name) {
   43.70    if (klass != NULL &&
   43.71 -      Klass::cast(klass)->name() == vmSymbols::java_lang_invoke_MethodHandle()) {
   43.72 +      klass->name() == vmSymbols::java_lang_invoke_MethodHandle()) {
   43.73      vmIntrinsics::ID iid = signature_polymorphic_name_id(name);
   43.74      if (iid != vmIntrinsics::_none)
   43.75        return iid;
   43.76 @@ -539,7 +539,7 @@
   43.77  
   43.78  
   43.79  static oop object_java_mirror() {
   43.80 -  return Klass::cast(SystemDictionary::Object_klass())->java_mirror();
   43.81 +  return SystemDictionary::Object_klass()->java_mirror();
   43.82  }
   43.83  
   43.84  static oop field_name_or_null(Symbol* s) {
   43.85 @@ -560,9 +560,9 @@
   43.86      if (s == vmSymbols::object_signature()) {
   43.87        return object_java_mirror();
   43.88      } else if (s == vmSymbols::class_signature()) {
   43.89 -      return Klass::cast(SystemDictionary::Class_klass())->java_mirror();
   43.90 +      return SystemDictionary::Class_klass()->java_mirror();
   43.91      } else if (s == vmSymbols::string_signature()) {
   43.92 -      return Klass::cast(SystemDictionary::String_klass())->java_mirror();
   43.93 +      return SystemDictionary::String_klass()->java_mirror();
   43.94      }
   43.95    }
   43.96    return NULL;
   43.97 @@ -603,8 +603,8 @@
   43.98    {
   43.99      Klass* defc_klass = java_lang_Class::as_Klass(defc_oop());
  43.100      if (defc_klass == NULL)  return empty;  // a primitive; no resolution possible
  43.101 -    if (!Klass::cast(defc_klass)->oop_is_instance()) {
  43.102 -      if (!Klass::cast(defc_klass)->oop_is_array())  return empty;
  43.103 +    if (!defc_klass->oop_is_instance()) {
  43.104 +      if (!defc_klass->oop_is_array())  return empty;
  43.105        defc_klass = SystemDictionary::Object_klass();
  43.106      }
  43.107      defc = instanceKlassHandle(THREAD, defc_klass);
  43.108 @@ -767,7 +767,7 @@
  43.109      {
  43.110        // This is taken from LinkResolver::resolve_field, sans access checks.
  43.111        assert(vmtarget->is_klass(), "field vmtarget is Klass*");
  43.112 -      if (!Klass::cast((Klass*) vmtarget)->oop_is_instance())  break;
  43.113 +      if (!((Klass*) vmtarget)->oop_is_instance())  break;
  43.114        instanceKlassHandle defc(THREAD, (Klass*) vmtarget);
  43.115        DEBUG_ONLY(vmtarget = NULL);  // safety
  43.116        bool is_static = ((flags & JVM_ACC_STATIC) != 0);
  43.117 @@ -805,7 +805,7 @@
  43.118  
  43.119    // %%% take caller into account!
  43.120  
  43.121 -  if (k == NULL || !Klass::cast(k)->oop_is_instance())  return -1;
  43.122 +  if (k == NULL || !k->oop_is_instance())  return -1;
  43.123  
  43.124    int rfill = 0, rlimit = results->length(), rskip = skip;
  43.125    // overflow measurement:
  43.126 @@ -1032,7 +1032,7 @@
  43.127        if (!Reflection::verify_class_access(caller,
  43.128                                             reference_klass,
  43.129                                             true)) {
  43.130 -        THROW_MSG_NULL(vmSymbols::java_lang_InternalError(), Klass::cast(reference_klass)->external_name());
  43.131 +        THROW_MSG_NULL(vmSymbols::java_lang_InternalError(), reference_klass->external_name());
  43.132        }
  43.133      }
  43.134    }
  43.135 @@ -1108,7 +1108,7 @@
  43.136    if (vmtarget == NULL) {
  43.137      x = NULL;
  43.138    } else if (vmtarget->is_klass()) {
  43.139 -    x = Klass::cast((Klass*) vmtarget)->java_mirror();
  43.140 +    x = ((Klass*) vmtarget)->java_mirror();
  43.141    } else if (vmtarget->is_method()) {
  43.142      Handle mname2 = MethodHandles::new_MemberName(CHECK_NULL);
  43.143      x = MethodHandles::init_method_MemberName(mname2(), (Method*)vmtarget, false, NULL);
  43.144 @@ -1237,7 +1237,7 @@
  43.145    if (SystemDictionary::MethodHandle_klass() == NULL) {
  43.146      enable_MH = false;
  43.147    } else {
  43.148 -    oop mirror = Klass::cast(SystemDictionary::MethodHandle_klass())->java_mirror();
  43.149 +    oop mirror = SystemDictionary::MethodHandle_klass()->java_mirror();
  43.150      MH_class = (jclass) JNIHandles::make_local(env, mirror);
  43.151    }
  43.152  
    44.1 --- a/src/share/vm/prims/nativeLookup.cpp	Fri Nov 16 09:59:08 2012 +0100
    44.2 +++ b/src/share/vm/prims/nativeLookup.cpp	Fri Nov 16 09:19:12 2012 -0500
    44.3 @@ -349,7 +349,7 @@
    44.4      TempNewSymbol wrapper_symbol = SymbolTable::probe(wrapper_name, wrapper_name_len);
    44.5      if (wrapper_symbol != NULL) {
    44.6        KlassHandle kh(method->method_holder());
    44.7 -      Method* wrapper_method = Klass::cast(kh())->lookup_method(wrapper_symbol,
    44.8 +      Method* wrapper_method = kh()->lookup_method(wrapper_symbol,
    44.9                                                                    method->signature());
   44.10        if (wrapper_method != NULL && !wrapper_method->is_native()) {
   44.11          // we found a wrapper method, use its native entry
    45.1 --- a/src/share/vm/prims/unsafe.cpp	Fri Nov 16 09:59:08 2012 +0100
    45.2 +++ b/src/share/vm/prims/unsafe.cpp	Fri Nov 16 09:19:12 2012 -0500
    45.3 @@ -771,7 +771,7 @@
    45.4    oop mirror = JNIHandles::resolve_non_null(clazz);
    45.5  
    45.6    Klass* klass = java_lang_Class::as_Klass(mirror);
    45.7 -  if (klass != NULL && Klass::cast(klass)->should_be_initialized()) {
    45.8 +  if (klass != NULL && klass->should_be_initialized()) {
    45.9      InstanceKlass* k = InstanceKlass::cast(klass);
   45.10      k->initialize(CHECK);
   45.11    }
   45.12 @@ -785,7 +785,7 @@
   45.13    }
   45.14    oop mirror = JNIHandles::resolve_non_null(clazz);
   45.15    Klass* klass = java_lang_Class::as_Klass(mirror);
   45.16 -  if (klass != NULL && Klass::cast(klass)->should_be_initialized()) {
   45.17 +  if (klass != NULL && klass->should_be_initialized()) {
   45.18      return true;
   45.19    }
   45.20    return false;
    46.1 --- a/src/share/vm/runtime/arguments.cpp	Fri Nov 16 09:59:08 2012 +0100
    46.2 +++ b/src/share/vm/runtime/arguments.cpp	Fri Nov 16 09:19:12 2012 -0500
    46.3 @@ -24,6 +24,7 @@
    46.4  
    46.5  #include "precompiled.hpp"
    46.6  #include "classfile/javaAssertions.hpp"
    46.7 +#include "classfile/symbolTable.hpp"
    46.8  #include "compiler/compilerOracle.hpp"
    46.9  #include "memory/allocation.inline.hpp"
   46.10  #include "memory/cardTableRS.hpp"
   46.11 @@ -1844,6 +1845,11 @@
   46.12    status = status && verify_percentage(MinHeapFreeRatio, "MinHeapFreeRatio");
   46.13    status = status && verify_percentage(MaxHeapFreeRatio, "MaxHeapFreeRatio");
   46.14  
   46.15 +  // Divide by bucket size to prevent a large size from causing rollover when
   46.16 +  // calculating amount of memory needed to be allocated for the String table.
   46.17 +  status = status && verify_interval(StringTableSize, defaultStringTableSize,
   46.18 +    (max_uintx / StringTable::bucket_size()), "StringTable size");
   46.19 +
   46.20    if (MinHeapFreeRatio > MaxHeapFreeRatio) {
   46.21      jio_fprintf(defaultStream::error_stream(),
   46.22                  "MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or "
    47.1 --- a/src/share/vm/runtime/biasedLocking.cpp	Fri Nov 16 09:59:08 2012 +0100
    47.2 +++ b/src/share/vm/runtime/biasedLocking.cpp	Fri Nov 16 09:19:12 2012 -0500
    47.3 @@ -39,7 +39,7 @@
    47.4  static GrowableArray<markOop>* _preserved_mark_stack = NULL;
    47.5  
    47.6  static void enable_biased_locking(Klass* k) {
    47.7 -  Klass::cast(k)->set_prototype_header(markOopDesc::biased_locking_prototype());
    47.8 +  k->set_prototype_header(markOopDesc::biased_locking_prototype());
    47.9  }
   47.10  
   47.11  class VM_EnableBiasedLocking: public VM_Operation {
   47.12 @@ -149,7 +149,7 @@
   47.13      if (TraceBiasedLocking) {
   47.14        ResourceMark rm;
   47.15        tty->print_cr("  (Skipping revocation of object of type %s because it's no longer biased)",
   47.16 -                    Klass::cast(obj->klass())->external_name());
   47.17 +                    obj->klass()->external_name());
   47.18      }
   47.19      return BiasedLocking::NOT_BIASED;
   47.20    }
   47.21 @@ -161,7 +161,7 @@
   47.22    if (TraceBiasedLocking && (Verbose || !is_bulk)) {
   47.23      ResourceMark rm;
   47.24      tty->print_cr("Revoking bias of object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s , prototype header " INTPTR_FORMAT " , allow rebias %d , requesting thread " INTPTR_FORMAT,
   47.25 -                  (intptr_t) obj, (intptr_t) mark, Klass::cast(obj->klass())->external_name(), (intptr_t) Klass::cast(obj->klass())->prototype_header(), (allow_rebias ? 1 : 0), (intptr_t) requesting_thread);
   47.26 +                  (intptr_t) obj, (intptr_t) mark, obj->klass()->external_name(), (intptr_t) obj->klass()->prototype_header(), (allow_rebias ? 1 : 0), (intptr_t) requesting_thread);
   47.27    }
   47.28  
   47.29    JavaThread* biased_thread = mark->biased_locker();
   47.30 @@ -326,7 +326,7 @@
   47.31      tty->print_cr("* Beginning bulk revocation (kind == %s) because of object "
   47.32                    INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
   47.33                    (bulk_rebias ? "rebias" : "revoke"),
   47.34 -                  (intptr_t) o, (intptr_t) o->mark(), Klass::cast(o->klass())->external_name());
   47.35 +                  (intptr_t) o, (intptr_t) o->mark(), o->klass()->external_name());
   47.36    }
   47.37  
   47.38    jlong cur_time = os::javaTimeMillis();
   47.39 @@ -334,7 +334,7 @@
   47.40  
   47.41  
   47.42    Klass* k_o = o->klass();
   47.43 -  Klass* klass = Klass::cast(k_o);
   47.44 +  Klass* klass = k_o;
   47.45  
   47.46    if (bulk_rebias) {
   47.47      // Use the epoch in the klass of the object to implicitly revoke
   47.48 @@ -546,7 +546,7 @@
   47.49        return BIAS_REVOKED;
   47.50      }
   47.51    } else if (mark->has_bias_pattern()) {
   47.52 -    Klass* k = Klass::cast(obj->klass());
   47.53 +    Klass* k = obj->klass();
   47.54      markOop prototype_header = k->prototype_header();
   47.55      if (!prototype_header->has_bias_pattern()) {
   47.56        // This object has a stale bias from before the bulk revocation
   47.57 @@ -590,7 +590,7 @@
   47.58    if (heuristics == HR_NOT_BIASED) {
   47.59      return NOT_BIASED;
   47.60    } else if (heuristics == HR_SINGLE_REVOKE) {
   47.61 -    Klass *k = Klass::cast(obj->klass());
   47.62 +    Klass *k = obj->klass();
   47.63      markOop prototype_header = k->prototype_header();
   47.64      if (mark->biased_locker() == THREAD &&
   47.65          prototype_header->bias_epoch() == mark->bias_epoch()) {
    48.1 --- a/src/share/vm/runtime/globals.hpp	Fri Nov 16 09:59:08 2012 +0100
    48.2 +++ b/src/share/vm/runtime/globals.hpp	Fri Nov 16 09:19:12 2012 -0500
    48.3 @@ -3613,7 +3613,7 @@
    48.4    diagnostic(bool, PrintDTraceDOF, false,                                   \
    48.5               "Print the DTrace DOF passed to the system for JSDT probes")   \
    48.6                                                                              \
    48.7 -  product(uintx, StringTableSize, 1009,                                     \
    48.8 +  product(uintx, StringTableSize, defaultStringTableSize,                   \
    48.9            "Number of buckets in the interned String table")                 \
   48.10                                                                              \
   48.11    develop(bool, TraceDefaultMethods, false,                                 \
    49.1 --- a/src/share/vm/runtime/os.cpp	Fri Nov 16 09:59:08 2012 +0100
    49.2 +++ b/src/share/vm/runtime/os.cpp	Fri Nov 16 09:19:12 2012 -0500
    49.3 @@ -582,7 +582,9 @@
    49.4      // if NULL is returned the calling functions assume out of memory.
    49.5      size = 1;
    49.6    }
    49.7 -
    49.8 +  if (size > size + space_before + space_after) { // Check for rollover.
    49.9 +    return NULL;
   49.10 +  }
   49.11    NOT_PRODUCT(if (MallocVerifyInterval > 0) check_heap());
   49.12    u_char* ptr = (u_char*)::malloc(size + space_before + space_after);
   49.13  
    50.1 --- a/src/share/vm/runtime/reflection.cpp	Fri Nov 16 09:59:08 2012 +0100
    50.2 +++ b/src/share/vm/runtime/reflection.cpp	Fri Nov 16 09:19:12 2012 -0500
    50.3 @@ -70,8 +70,8 @@
    50.4      }
    50.5    }
    50.6    if (caller != NULL) {
    50.7 -    const char * from = Klass::cast(caller)->external_name();
    50.8 -    const char * to = Klass::cast(to_class)->external_name();
    50.9 +    const char * from = caller->external_name();
   50.10 +    const char * to = to_class->external_name();
   50.11      // print in a single call to reduce interleaving between threads
   50.12      if (source_file != NULL) {
   50.13        tty->print("RESOLVE %s %s %s:%d (reflection)\n", from, to, source_file, line_number);
   50.14 @@ -330,7 +330,7 @@
   50.15      return TypeArrayKlass::cast(tak)->allocate(length, THREAD);
   50.16    } else {
   50.17      Klass* k = java_lang_Class::as_Klass(element_mirror);
   50.18 -    if (Klass::cast(k)->oop_is_array() && ArrayKlass::cast(k)->dimension() >= MAX_DIM) {
   50.19 +    if (k->oop_is_array() && ArrayKlass::cast(k)->dimension() >= MAX_DIM) {
   50.20        THROW_0(vmSymbols::java_lang_IllegalArgumentException());
   50.21      }
   50.22      return oopFactory::new_objArray(k, length, THREAD);
   50.23 @@ -366,7 +366,7 @@
   50.24      klass = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL);
   50.25    } else {
   50.26      klass = java_lang_Class::as_Klass(element_mirror);
   50.27 -    if (Klass::cast(klass)->oop_is_array()) {
   50.28 +    if (klass->oop_is_array()) {
   50.29        int k_dim = ArrayKlass::cast(klass)->dimension();
   50.30        if (k_dim + len > MAX_DIM) {
   50.31          THROW_0(vmSymbols::java_lang_IllegalArgumentException());
   50.32 @@ -374,7 +374,7 @@
   50.33        dim += k_dim;
   50.34      }
   50.35    }
   50.36 -  klass = Klass::cast(klass)->array_klass(dim, CHECK_NULL);
   50.37 +  klass = klass->array_klass(dim, CHECK_NULL);
   50.38    oop obj = ArrayKlass::cast(klass)->multi_allocate(len, dimensions, THREAD);
   50.39    assert(obj->is_array(), "just checking");
   50.40    return arrayOop(obj);
   50.41 @@ -387,7 +387,7 @@
   50.42    }
   50.43  
   50.44    Klass* klass = java_lang_Class::as_Klass(mirror);
   50.45 -  if (!Klass::cast(klass)->oop_is_array()) {
   50.46 +  if (!klass->oop_is_array()) {
   50.47      return NULL;
   50.48    }
   50.49  
   50.50 @@ -395,15 +395,15 @@
   50.51  #ifdef ASSERT
   50.52    oop result2 = NULL;
   50.53    if (ArrayKlass::cast(klass)->dimension() == 1) {
   50.54 -    if (Klass::cast(klass)->oop_is_typeArray()) {
   50.55 +    if (klass->oop_is_typeArray()) {
   50.56        result2 = basic_type_arrayklass_to_mirror(klass, CHECK_NULL);
   50.57      } else {
   50.58 -      result2 = Klass::cast(ObjArrayKlass::cast(klass)->element_klass())->java_mirror();
   50.59 +      result2 = ObjArrayKlass::cast(klass)->element_klass()->java_mirror();
   50.60      }
   50.61    } else {
   50.62      Klass* lower_dim = ArrayKlass::cast(klass)->lower_dimension();
   50.63 -    assert(Klass::cast(lower_dim)->oop_is_array(), "just checking");
   50.64 -    result2 = Klass::cast(lower_dim)->java_mirror();
   50.65 +    assert(lower_dim->oop_is_array(), "just checking");
   50.66 +    result2 = lower_dim->java_mirror();
   50.67    }
   50.68    assert(result == result2, "results must be consistent");
   50.69  #endif //ASSERT
   50.70 @@ -442,7 +442,7 @@
   50.71    if (acc.is_protected()) {
   50.72      if (target_class != client_class) {
   50.73        if (!is_same_class_package(client_class, field_class)) {
   50.74 -        if (!Klass::cast(target_class)->is_subclass_of(client_class)) {
   50.75 +        if (!target_class->is_subclass_of(client_class)) {
   50.76            THROW_(vmSymbols::java_lang_IllegalAccessException(), false);
   50.77          }
   50.78        }
   50.79 @@ -468,7 +468,7 @@
   50.80    // sun/reflect/MagicAccessorImpl subclasses to succeed trivially.
   50.81    if (   JDK_Version::is_gte_jdk14x_version()
   50.82        && UseNewReflection
   50.83 -      && Klass::cast(current_class)->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) {
   50.84 +      && current_class->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) {
   50.85      return true;
   50.86    }
   50.87  
   50.88 @@ -546,12 +546,12 @@
   50.89    if (access.is_protected()) {
   50.90      if (!protected_restriction) {
   50.91        // See if current_class is a subclass of field_class
   50.92 -      if (Klass::cast(current_class)->is_subclass_of(field_class)) {
   50.93 +      if (current_class->is_subclass_of(field_class)) {
   50.94          if (access.is_static() || // static fields are ok, see 6622385
   50.95              current_class == resolved_class ||
   50.96              field_class == resolved_class ||
   50.97 -            Klass::cast(current_class)->is_subclass_of(resolved_class) ||
   50.98 -            Klass::cast(resolved_class)->is_subclass_of(current_class)) {
   50.99 +            current_class->is_subclass_of(resolved_class) ||
  50.100 +            resolved_class->is_subclass_of(current_class)) {
  50.101            return true;
  50.102          }
  50.103        }
  50.104 @@ -566,7 +566,7 @@
  50.105    // sun/reflect/MagicAccessorImpl subclasses to succeed trivially.
  50.106    if (   JDK_Version::is_gte_jdk14x_version()
  50.107        && UseNewReflection
  50.108 -      && Klass::cast(current_class)->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) {
  50.109 +      && current_class->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) {
  50.110      return true;
  50.111    }
  50.112  
  50.113 @@ -693,7 +693,7 @@
  50.114    }
  50.115  
  50.116    oop loader = InstanceKlass::cast(k())->class_loader();
  50.117 -  oop protection_domain = Klass::cast(k())->protection_domain();
  50.118 +  oop protection_domain = k()->protection_domain();
  50.119    Klass* result = SystemDictionary::resolve_or_fail(signature,
  50.120                                      Handle(THREAD, loader),
  50.121                                      Handle(THREAD, protection_domain),
  50.122 @@ -703,7 +703,7 @@
  50.123      trace_class_resolution(result);
  50.124    }
  50.125  
  50.126 -  oop nt = Klass::cast(result)->java_mirror();
  50.127 +  oop nt = result->java_mirror();
  50.128    return Handle(THREAD, nt);
  50.129  }
  50.130  
  50.131 @@ -937,7 +937,7 @@
  50.132                ResourceMark rm(THREAD);
  50.133                Handle h_origexception = Exceptions::new_exception(THREAD,
  50.134                       vmSymbols::java_lang_AbstractMethodError(),
  50.135 -                     Method::name_and_sig_as_C_string(Klass::cast(target_klass()),
  50.136 +                     Method::name_and_sig_as_C_string(target_klass(),
  50.137                       method->name(),
  50.138                       method->signature()));
  50.139                JavaCallArguments args(h_origexception);
  50.140 @@ -947,7 +947,7 @@
  50.141              } else {
  50.142                ResourceMark rm(THREAD);
  50.143                THROW_MSG_0(vmSymbols::java_lang_AbstractMethodError(),
  50.144 -                        Method::name_and_sig_as_C_string(Klass::cast(target_klass()),
  50.145 +                        Method::name_and_sig_as_C_string(target_klass(),
  50.146                                                                  method->name(),
  50.147                                                                  method->signature()));
  50.148              }
  50.149 @@ -962,7 +962,7 @@
  50.150    if (method.is_null()) {
  50.151      ResourceMark rm(THREAD);
  50.152      THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(),
  50.153 -                Method::name_and_sig_as_C_string(Klass::cast(klass()),
  50.154 +                Method::name_and_sig_as_C_string(klass(),
  50.155                                                          reflected_method->name(),
  50.156                                                          reflected_method->signature()));
  50.157    }
    51.1 --- a/src/share/vm/runtime/sharedRuntime.cpp	Fri Nov 16 09:59:08 2012 +0100
    51.2 +++ b/src/share/vm/runtime/sharedRuntime.cpp	Fri Nov 16 09:19:12 2012 -0500
    51.3 @@ -1775,7 +1775,7 @@
    51.4    // The copy_array mechanism is awkward and could be removed, but
    51.5    // the compilers don't call this function except as a last resort,
    51.6    // so it probably doesn't matter.
    51.7 -  Klass::cast(src->klass())->copy_array((arrayOopDesc*)src,  src_pos,
    51.8 +  src->klass()->copy_array((arrayOopDesc*)src,  src_pos,
    51.9                                          (arrayOopDesc*)dest, dest_pos,
   51.10                                          length, thread);
   51.11  }
   51.12 @@ -1788,8 +1788,8 @@
   51.13    vframeStream vfst(thread, true);
   51.14    assert(!vfst.at_end(), "Java frame must exist");
   51.15    Bytecode_checkcast cc(vfst.method(), vfst.method()->bcp_from(vfst.bci()));
   51.16 -  Klass* targetKlass = Klass::cast(vfst.method()->constants()->klass_at(
   51.17 -    cc.index(), thread));
   51.18 +  Klass* targetKlass = vfst.method()->constants()->klass_at(
   51.19 +    cc.index(), thread);
   51.20    return generate_class_cast_message(objName, targetKlass->external_name());
   51.21  }
   51.22  
    52.1 --- a/src/share/vm/runtime/signature.cpp	Fri Nov 16 09:59:08 2012 +0100
    52.2 +++ b/src/share/vm/runtime/signature.cpp	Fri Nov 16 09:19:12 2012 -0500
    52.3 @@ -354,7 +354,7 @@
    52.4      return Universe::java_mirror(type());
    52.5    Klass* klass = as_klass(class_loader, protection_domain, failure_mode, CHECK_NULL);
    52.6    if (klass == NULL)  return NULL;
    52.7 -  return Klass::cast(klass)->java_mirror();
    52.8 +  return klass->java_mirror();
    52.9  }
   52.10  
   52.11  Symbol* SignatureStream::as_symbol_or_null() {
    53.1 --- a/src/share/vm/runtime/synchronizer.cpp	Fri Nov 16 09:59:08 2012 +0100
    53.2 +++ b/src/share/vm/runtime/synchronizer.cpp	Fri Nov 16 09:19:12 2012 -0500
    53.3 @@ -1323,7 +1323,7 @@
    53.4                ResourceMark rm;
    53.5                tty->print_cr("Inflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
    53.6                  (intptr_t) object, (intptr_t) object->mark(),
    53.7 -                Klass::cast(object->klass())->external_name());
    53.8 +                object->klass()->external_name());
    53.9              }
   53.10            }
   53.11            return m ;
   53.12 @@ -1373,7 +1373,7 @@
   53.13            ResourceMark rm;
   53.14            tty->print_cr("Inflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
   53.15              (intptr_t) object, (intptr_t) object->mark(),
   53.16 -            Klass::cast(object->klass())->external_name());
   53.17 +            object->klass()->external_name());
   53.18          }
   53.19        }
   53.20        return m ;
   53.21 @@ -1440,7 +1440,7 @@
   53.22         if (obj->is_instance()) {
   53.23           ResourceMark rm;
   53.24             tty->print_cr("Deflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
   53.25 -                (intptr_t) obj, (intptr_t) obj->mark(), Klass::cast(obj->klass())->external_name());
   53.26 +                (intptr_t) obj, (intptr_t) obj->mark(), obj->klass()->external_name());
   53.27         }
   53.28       }
   53.29  
    54.1 --- a/src/share/vm/runtime/thread.cpp	Fri Nov 16 09:59:08 2012 +0100
    54.2 +++ b/src/share/vm/runtime/thread.cpp	Fri Nov 16 09:19:12 2012 -0500
    54.3 @@ -1785,7 +1785,7 @@
    54.4            jio_fprintf(defaultStream::error_stream(),
    54.5                  "\nException: %s thrown from the UncaughtExceptionHandler"
    54.6                  " in thread \"%s\"\n",
    54.7 -                Klass::cast(pending_exception()->klass())->external_name(),
    54.8 +                pending_exception()->klass()->external_name(),
    54.9                  get_thread_name());
   54.10            CLEAR_PENDING_EXCEPTION;
   54.11          }
    55.1 --- a/src/share/vm/runtime/vframe.cpp	Fri Nov 16 09:59:08 2012 +0100
    55.2 +++ b/src/share/vm/runtime/vframe.cpp	Fri Nov 16 09:19:12 2012 -0500
    55.3 @@ -149,7 +149,7 @@
    55.4        Klass* target_klass = java_lang_Class::as_Klass(obj());
    55.5        st->print_cr("(a java.lang.Class for %s)", InstanceKlass::cast(target_klass)->external_name());
    55.6      } else {
    55.7 -      Klass* k = Klass::cast(obj->klass());
    55.8 +      Klass* k = obj->klass();
    55.9        st->print_cr("(a %s)", k->external_name());
   55.10      }
   55.11    }
   55.12 @@ -172,7 +172,7 @@
   55.13        }
   55.14      } else if (thread()->current_park_blocker() != NULL) {
   55.15        oop obj = thread()->current_park_blocker();
   55.16 -      Klass* k = Klass::cast(obj->klass());
   55.17 +      Klass* k = obj->klass();
   55.18        st->print_cr("\t- %s <" INTPTR_FORMAT "> (a %s)", "parking to wait for ", (address)obj, k->external_name());
   55.19      }
   55.20    }
   55.21 @@ -550,7 +550,7 @@
   55.22    InstanceKlass*     k = m->method_holder();
   55.23    tty->print_cr("frame( sp=" INTPTR_FORMAT ", unextended_sp=" INTPTR_FORMAT ", fp=" INTPTR_FORMAT ", pc=" INTPTR_FORMAT ")",
   55.24                  _fr.sp(),  _fr.unextended_sp(), _fr.fp(), _fr.pc());
   55.25 -  tty->print("%s.%s", Klass::cast(k)->internal_name(), m->name()->as_C_string());
   55.26 +  tty->print("%s.%s", k->internal_name(), m->name()->as_C_string());
   55.27  
   55.28    if (!m->is_native()) {
   55.29      Symbol*  source_name = k->source_file_name();
    56.1 --- a/src/share/vm/services/classLoadingService.hpp	Fri Nov 16 09:59:08 2012 +0100
    56.2 +++ b/src/share/vm/services/classLoadingService.hpp	Fri Nov 16 09:19:12 2012 -0500
    56.3 @@ -135,7 +135,7 @@
    56.4      // The spec is unclear at this point to count array klasses or not
    56.5      // and also indirect creation of array of super class and secondaries
    56.6      //
    56.7 -    // for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) {
    56.8 +    // for (Klass* l = k; l != NULL; l = l->array_klass_or_null()) {
    56.9      //  KlassHandle h(_current_thread, l);
   56.10      //  _loaded_classes->append(h);
   56.11      // }
    57.1 --- a/src/share/vm/services/heapDumper.cpp	Fri Nov 16 09:59:08 2012 +0100
    57.2 +++ b/src/share/vm/services/heapDumper.cpp	Fri Nov 16 09:19:12 2012 -0500
    57.3 @@ -879,7 +879,7 @@
    57.4    writer->write_u4(STACK_TRACE_ID);
    57.5  
    57.6    // class ID
    57.7 -  writer->write_classID(Klass::cast(k));
    57.8 +  writer->write_classID(k);
    57.9  
   57.10    // number of bytes that follow
   57.11    writer->write_u4(instance_size(k) );
   57.12 @@ -891,7 +891,7 @@
   57.13  // creates HPROF_GC_CLASS_DUMP record for the given class and each of
   57.14  // its array classes
   57.15  void DumperSupport::dump_class_and_array_classes(DumpWriter* writer, Klass* k) {
   57.16 -  Klass* klass = Klass::cast(k);
   57.17 +  Klass* klass = k;
   57.18    assert(klass->oop_is_instance(), "not an InstanceKlass");
   57.19    InstanceKlass* ik = (InstanceKlass*)klass;
   57.20  
   57.21 @@ -906,7 +906,7 @@
   57.22    if (java_super == NULL) {
   57.23      writer->write_objectID(oop(NULL));
   57.24    } else {
   57.25 -    writer->write_classID(Klass::cast(java_super));
   57.26 +    writer->write_classID(java_super);
   57.27    }
   57.28  
   57.29    writer->write_objectID(ik->class_loader());
   57.30 @@ -932,7 +932,7 @@
   57.31    // array classes
   57.32    k = klass->array_klass_or_null();
   57.33    while (k != NULL) {
   57.34 -    Klass* klass = Klass::cast(k);
   57.35 +    Klass* klass = k;
   57.36      assert(klass->oop_is_objArray(), "not an ObjArrayKlass");
   57.37  
   57.38      writer->write_u1(HPROF_GC_CLASS_DUMP);
   57.39 @@ -942,7 +942,7 @@
   57.40      // super class of array classes is java.lang.Object
   57.41      java_super = klass->java_super();
   57.42      assert(java_super != NULL, "checking");
   57.43 -    writer->write_classID(Klass::cast(java_super));
   57.44 +    writer->write_classID(java_super);
   57.45  
   57.46      writer->write_objectID(ik->class_loader());
   57.47      writer->write_objectID(ik->signers());
   57.48 @@ -965,7 +965,7 @@
   57.49  void DumperSupport::dump_basic_type_array_class(DumpWriter* writer, Klass* k) {
   57.50   // array classes
   57.51   while (k != NULL) {
   57.52 -    Klass* klass = Klass::cast(k);
   57.53 +    Klass* klass = k;
   57.54  
   57.55      writer->write_u1(HPROF_GC_CLASS_DUMP);
   57.56      writer->write_classID(klass);
   57.57 @@ -974,7 +974,7 @@
   57.58      // super class of array classes is java.lang.Object
   57.59      Klass* java_super = klass->java_super();
   57.60      assert(java_super != NULL, "checking");
   57.61 -    writer->write_classID(Klass::cast(java_super));
   57.62 +    writer->write_classID(java_super);
   57.63  
   57.64      writer->write_objectID(oop(NULL));    // loader
   57.65      writer->write_objectID(oop(NULL));    // signers
   57.66 @@ -1001,7 +1001,7 @@
   57.67    writer->write_u4((u4)array->length());
   57.68  
   57.69    // array class ID
   57.70 -  writer->write_classID(Klass::cast(array->klass()));
   57.71 +  writer->write_classID(array->klass());
   57.72  
   57.73    // [id]* elements
   57.74    for (int index=0; index<array->length(); index++) {
   57.75 @@ -1525,7 +1525,7 @@
   57.76      writer()->write_u4(++class_serial_num);
   57.77  
   57.78      // class ID
   57.79 -    Klass* klass = Klass::cast(k);
   57.80 +    Klass* klass = k;
   57.81      writer()->write_classID(klass);
   57.82  
   57.83      // add the Klass* and class serial number pair
   57.84 @@ -1796,7 +1796,7 @@
   57.85        // write fake frame that makes it look like the thread, which caused OOME,
   57.86        // is in the OutOfMemoryError zero-parameter constructor
   57.87        if (thread == _oome_thread && _oome_constructor != NULL) {
   57.88 -        int oome_serial_num = _klass_map->find(Klass::cast(_oome_constructor->method_holder()));
   57.89 +        int oome_serial_num = _klass_map->find(_oome_constructor->method_holder());
   57.90          // the class serial number starts from 1
   57.91          assert(oome_serial_num > 0, "OutOfMemoryError class not found");
   57.92          DumperSupport::dump_stack_frame(writer(), ++frame_serial_num, oome_serial_num,
   57.93 @@ -1806,7 +1806,7 @@
   57.94        for (int j=0; j < depth; j++) {
   57.95          StackFrameInfo* frame = stack_trace->stack_frame_at(j);
   57.96          Method* m = frame->method();
   57.97 -        int class_serial_num = _klass_map->find(Klass::cast(m->method_holder()));
   57.98 +        int class_serial_num = _klass_map->find(m->method_holder());
   57.99          // the class serial number starts from 1
  57.100          assert(class_serial_num > 0, "class not found");
  57.101          DumperSupport::dump_stack_frame(writer(), ++frame_serial_num, class_serial_num, m, frame->bci());
    58.1 --- a/src/share/vm/services/management.cpp	Fri Nov 16 09:59:08 2012 +0100
    58.2 +++ b/src/share/vm/services/management.cpp	Fri Nov 16 09:19:12 2012 -0500
    58.3 @@ -1417,7 +1417,7 @@
    58.4  
    58.5    for (int i = 0; i < num_classes; i++) {
    58.6      KlassHandle kh = lce.get_klass(i);
    58.7 -    oop mirror = Klass::cast(kh())->java_mirror();
    58.8 +    oop mirror = kh()->java_mirror();
    58.9      classes_ah->obj_at_put(i, mirror);
   58.10    }
   58.11  
    59.1 --- a/src/share/vm/services/memBaseline.cpp	Fri Nov 16 09:59:08 2012 +0100
    59.2 +++ b/src/share/vm/services/memBaseline.cpp	Fri Nov 16 09:19:12 2012 -0500
    59.3 @@ -115,17 +115,25 @@
    59.4    while (malloc_ptr != NULL) {
    59.5      index = flag2index(FLAGS_TO_MEMORY_TYPE(malloc_ptr->flags()));
    59.6      size_t size = malloc_ptr->size();
    59.7 -    _total_malloced += size;
    59.8 -    _malloc_data[index].inc(size);
    59.9 -    if (MemPointerRecord::is_arena_record(malloc_ptr->flags())) {
   59.10 -      // see if arena size record present
   59.11 -      MemPointerRecord* next_malloc_ptr = (MemPointerRecordEx*)malloc_itr.peek_next();
   59.12 -      if (MemPointerRecord::is_arena_size_record(next_malloc_ptr->flags())) {
   59.13 -        assert(next_malloc_ptr->is_size_record_of_arena(malloc_ptr), "arena records do not match");
   59.14 -        size = next_malloc_ptr->size();
   59.15 -        _arena_data[index].inc(size);
   59.16 -        used_arena_size += size;
   59.17 -        malloc_itr.next();
   59.18 +    if (malloc_ptr->is_arena_memory_record()) {
   59.19 +      // We do have anonymous arenas, they are either used as value objects,
   59.20 +      // which are embedded inside other objects, or used as stack objects.
   59.21 +      _arena_data[index].inc(size);
   59.22 +      used_arena_size += size;
   59.23 +    } else {
   59.24 +      _total_malloced += size;
   59.25 +      _malloc_data[index].inc(size);
   59.26 +      if (malloc_ptr->is_arena_record()) {
   59.27 +        // see if arena memory record present
   59.28 +        MemPointerRecord* next_malloc_ptr = (MemPointerRecordEx*)malloc_itr.peek_next();
   59.29 +        if (next_malloc_ptr->is_arena_memory_record()) {
   59.30 +          assert(next_malloc_ptr->is_memory_record_of_arena(malloc_ptr),
   59.31 +             "Arena records do not match");
   59.32 +          size = next_malloc_ptr->size();
   59.33 +          _arena_data[index].inc(size);
   59.34 +          used_arena_size += size;
   59.35 +          malloc_itr.next();
   59.36 +        }
   59.37        }
   59.38      }
   59.39      malloc_ptr = (MemPointerRecordEx*)malloc_itr.next();
   59.40 @@ -193,7 +201,7 @@
   59.41  
   59.42    // baseline memory that is totaled over 1 KB
   59.43    while (malloc_ptr != NULL) {
   59.44 -    if (!MemPointerRecord::is_arena_size_record(malloc_ptr->flags())) {
   59.45 +    if (!MemPointerRecord::is_arena_memory_record(malloc_ptr->flags())) {
   59.46        // skip thread stacks
   59.47        if (!IS_MEMORY_TYPE(malloc_ptr->flags(), mtThreadStack)) {
   59.48          if (malloc_callsite.addr() != malloc_ptr->pc()) {
    60.1 --- a/src/share/vm/services/memPtr.hpp	Fri Nov 16 09:59:08 2012 +0100
    60.2 +++ b/src/share/vm/services/memPtr.hpp	Fri Nov 16 09:19:12 2012 -0500
    60.3 @@ -165,7 +165,7 @@
    60.4      return (flags & (otArena | tag_size)) == otArena;
    60.5    }
    60.6  
    60.7 -  inline static bool is_arena_size_record(MEMFLAGS flags) {
    60.8 +  inline static bool is_arena_memory_record(MEMFLAGS flags) {
    60.9      return (flags & (otArena | tag_size)) == (otArena | tag_size);
   60.10    }
   60.11  
   60.12 @@ -256,8 +256,8 @@
   60.13    }
   60.14  
   60.15    // if this record records a size information of an arena
   60.16 -  inline bool is_arena_size_record() const {
   60.17 -    return is_arena_size_record(_flags);
   60.18 +  inline bool is_arena_memory_record() const {
   60.19 +    return is_arena_memory_record(_flags);
   60.20    }
   60.21  
   60.22    // if this pointer represents an address to an arena object
   60.23 @@ -266,8 +266,8 @@
   60.24    }
   60.25  
   60.26    // if this record represents a size information of specific arena
   60.27 -  inline bool is_size_record_of_arena(const MemPointerRecord* arena_rc) {
   60.28 -    assert(is_arena_size_record(), "not size record");
   60.29 +  inline bool is_memory_record_of_arena(const MemPointerRecord* arena_rc) {
   60.30 +    assert(is_arena_memory_record(), "not size record");
   60.31      assert(arena_rc->is_arena_record(), "not arena record");
   60.32      return (arena_rc->addr() + sizeof(void*)) == addr();
   60.33    }
    61.1 --- a/src/share/vm/services/memSnapshot.cpp	Fri Nov 16 09:59:08 2012 +0100
    61.2 +++ b/src/share/vm/services/memSnapshot.cpp	Fri Nov 16 09:19:12 2012 -0500
    61.3 @@ -50,7 +50,7 @@
    61.4        tty->print_cr(" (tag)");
    61.5      }
    61.6    } else {
    61.7 -    if (rec->is_arena_size_record()) {
    61.8 +    if (rec->is_arena_memory_record()) {
    61.9        tty->print_cr(" (arena size)");
   61.10      } else if (rec->is_allocation_record()) {
   61.11        tty->print_cr(" (malloc)");
   61.12 @@ -123,20 +123,31 @@
   61.13  // in different types.
   61.14  bool VMMemPointerIterator::add_reserved_region(MemPointerRecord* rec) {
   61.15    assert(rec->is_allocation_record(), "Sanity check");
   61.16 -  VMMemRegion* cur = (VMMemRegion*)current();
   61.17 +  VMMemRegion* reserved_region = (VMMemRegion*)current();
   61.18  
   61.19    // we don't have anything yet
   61.20 -  if (cur == NULL) {
   61.21 +  if (reserved_region == NULL) {
   61.22      return insert_record(rec);
   61.23    }
   61.24  
   61.25 -  assert(cur->is_reserved_region(), "Sanity check");
   61.26 +  assert(reserved_region->is_reserved_region(), "Sanity check");
   61.27    // duplicated records
   61.28 -  if (cur->is_same_region(rec)) {
   61.29 +  if (reserved_region->is_same_region(rec)) {
   61.30      return true;
   61.31    }
   61.32 -  assert(cur->base() > rec->addr(), "Just check: locate()");
   61.33 -  assert(!cur->overlaps_region(rec), "overlapping reserved regions");
   61.34 +  // Overlapping stack regions indicate that a JNI thread failed to
   61.35 +  // detach from the VM before exiting. This leaks the JavaThread object.
   61.36 +  if (CheckJNICalls)  {
   61.37 +      guarantee(FLAGS_TO_MEMORY_TYPE(reserved_region->flags()) != mtThreadStack ||
   61.38 +         !reserved_region->overlaps_region(rec),
   61.39 +         "Attached JNI thread exited without being detached");
   61.40 +  }
   61.41 +  // otherwise, we should not have overlapping reserved regions
   61.42 +  assert(FLAGS_TO_MEMORY_TYPE(reserved_region->flags()) == mtThreadStack ||
   61.43 +    reserved_region->base() > rec->addr(), "Just check: locate()");
   61.44 +  assert(FLAGS_TO_MEMORY_TYPE(reserved_region->flags()) == mtThreadStack ||
   61.45 +    !reserved_region->overlaps_region(rec), "overlapping reserved regions");
   61.46 +
   61.47    return insert_record(rec);
   61.48  }
   61.49  
   61.50 @@ -390,21 +401,31 @@
   61.51    }
   61.52  }
   61.53  
   61.54 -void MemSnapshot::copy_pointer(MemPointerRecord* dest, const MemPointerRecord* src) {
   61.55 +
   61.56 +void MemSnapshot::copy_seq_pointer(MemPointerRecord* dest, const MemPointerRecord* src) {
   61.57    assert(dest != NULL && src != NULL, "Just check");
   61.58    assert(dest->addr() == src->addr(), "Just check");
   61.59 +  assert(dest->seq() > 0 && src->seq() > 0, "not sequenced");
   61.60  
   61.61 -  MEMFLAGS flags = dest->flags();
   61.62 +  if (MemTracker::track_callsite()) {
   61.63 +    *(SeqMemPointerRecordEx*)dest = *(SeqMemPointerRecordEx*)src;
   61.64 +  } else {
   61.65 +    *(SeqMemPointerRecord*)dest = *(SeqMemPointerRecord*)src;
   61.66 +  }
   61.67 +}
   61.68 +
   61.69 +void MemSnapshot::assign_pointer(MemPointerRecord*dest, const MemPointerRecord* src) {
   61.70 +  assert(src != NULL && dest != NULL, "Just check");
   61.71 +  assert(dest->seq() == 0 && src->seq() >0, "cast away sequence");
   61.72  
   61.73    if (MemTracker::track_callsite()) {
   61.74      *(MemPointerRecordEx*)dest = *(MemPointerRecordEx*)src;
   61.75    } else {
   61.76 -    *dest = *src;
   61.77 +    *(MemPointerRecord*)dest = *(MemPointerRecord*)src;
   61.78    }
   61.79  }
   61.80  
   61.81 -
   61.82 -// merge a per-thread memory recorder to the staging area
   61.83 +// merge a recorder to the staging area
   61.84  bool MemSnapshot::merge(MemRecorder* rec) {
   61.85    assert(rec != NULL && !rec->out_of_memory(), "Just check");
   61.86  
   61.87 @@ -412,71 +433,45 @@
   61.88  
   61.89    MutexLockerEx lock(_lock, true);
   61.90    MemPointerIterator malloc_staging_itr(_staging_area.malloc_data());
   61.91 -  MemPointerRecord *p1, *p2;
   61.92 -  p1 = (MemPointerRecord*) itr.current();
   61.93 -  while (p1 != NULL) {
   61.94 -    if (p1->is_vm_pointer()) {
   61.95 +  MemPointerRecord* incoming_rec = (MemPointerRecord*) itr.current();
   61.96 +  MemPointerRecord* matched_rec;
   61.97 +
   61.98 +  while (incoming_rec != NULL) {
   61.99 +    if (incoming_rec->is_vm_pointer()) {
  61.100        // we don't do anything with virtual memory records during merge
  61.101 -      if (!_staging_area.vm_data()->append(p1)) {
  61.102 +      if (!_staging_area.vm_data()->append(incoming_rec)) {
  61.103          return false;
  61.104        }
  61.105      } else {
  61.106        // locate matched record and/or also position the iterator to proper
  61.107        // location for this incoming record.
  61.108 -      p2 = (MemPointerRecord*)malloc_staging_itr.locate(p1->addr());
  61.109 -      // we have not seen this memory block, so just add to staging area
  61.110 -      if (p2 == NULL) {
  61.111 -        if (!malloc_staging_itr.insert(p1)) {
  61.112 +      matched_rec = (MemPointerRecord*)malloc_staging_itr.locate(incoming_rec->addr());
  61.113 +      // we have not seen this memory block in this generation,
  61.114 +      // so just add to staging area
  61.115 +      if (matched_rec == NULL) {
  61.116 +        if (!malloc_staging_itr.insert(incoming_rec)) {
  61.117            return false;
  61.118          }
  61.119 -      } else if (p1->addr() == p2->addr()) {
  61.120 -        MemPointerRecord* staging_next = (MemPointerRecord*)malloc_staging_itr.peek_next();
  61.121 -        // a memory block can have many tagging records, find right one to replace or
  61.122 -        // right position to insert
  61.123 -        while (staging_next != NULL && staging_next->addr() == p1->addr()) {
  61.124 -          if ((staging_next->flags() & MemPointerRecord::tag_masks) <=
  61.125 -            (p1->flags() & MemPointerRecord::tag_masks)) {
  61.126 -            p2 = (MemPointerRecord*)malloc_staging_itr.next();
  61.127 -            staging_next = (MemPointerRecord*)malloc_staging_itr.peek_next();
  61.128 -          } else {
  61.129 -            break;
  61.130 -          }
  61.131 +      } else if (incoming_rec->addr() == matched_rec->addr()) {
  61.132 +        // whoever has higher sequence number wins
  61.133 +        if (incoming_rec->seq() > matched_rec->seq()) {
  61.134 +          copy_seq_pointer(matched_rec, incoming_rec);
  61.135          }
  61.136 -        int df = (p1->flags() & MemPointerRecord::tag_masks) -
  61.137 -          (p2->flags() & MemPointerRecord::tag_masks);
  61.138 -        if (df == 0) {
  61.139 -          assert(p1->seq() > 0, "not sequenced");
  61.140 -          assert(p2->seq() > 0, "not sequenced");
  61.141 -          if (p1->seq() > p2->seq()) {
  61.142 -            copy_pointer(p2, p1);
  61.143 -          }
  61.144 -        } else if (df < 0) {
  61.145 -          if (!malloc_staging_itr.insert(p1)) {
  61.146 -            return false;
  61.147 -          }
  61.148 -        } else {
  61.149 -          if (!malloc_staging_itr.insert_after(p1)) {
  61.150 -            return false;
  61.151 -          }
  61.152 -        }
  61.153 -      } else if (p1->addr() < p2->addr()) {
  61.154 -        if (!malloc_staging_itr.insert(p1)) {
  61.155 +      } else if (incoming_rec->addr() < matched_rec->addr()) {
  61.156 +        if (!malloc_staging_itr.insert(incoming_rec)) {
  61.157            return false;
  61.158          }
  61.159        } else {
  61.160 -        if (!malloc_staging_itr.insert_after(p1)) {
  61.161 -          return false;
  61.162 -        }
  61.163 +        ShouldNotReachHere();
  61.164        }
  61.165      }
  61.166 -    p1 = (MemPointerRecord*)itr.next();
  61.167 +    incoming_rec = (MemPointerRecord*)itr.next();
  61.168    }
  61.169    NOT_PRODUCT(void check_staging_data();)
  61.170    return true;
  61.171  }
  61.172  
  61.173  
  61.174 -
  61.175  // promote data to next generation
  61.176  bool MemSnapshot::promote() {
  61.177    assert(_alloc_ptrs != NULL && _vm_ptrs != NULL, "Just check");
  61.178 @@ -507,20 +502,25 @@
  61.179      // found matched memory block
  61.180      if (matched_rec != NULL && new_rec->addr() == matched_rec->addr()) {
  61.181        // snapshot already contains 'live' records
  61.182 -      assert(matched_rec->is_allocation_record() || matched_rec->is_arena_size_record(),
  61.183 +      assert(matched_rec->is_allocation_record() || matched_rec->is_arena_memory_record(),
  61.184               "Sanity check");
  61.185        // update block states
  61.186 -      if (new_rec->is_allocation_record() || new_rec->is_arena_size_record()) {
  61.187 -        copy_pointer(matched_rec, new_rec);
  61.188 +      if (new_rec->is_allocation_record()) {
  61.189 +        assign_pointer(matched_rec, new_rec);
  61.190 +      } else if (new_rec->is_arena_memory_record()) {
  61.191 +        if (new_rec->size() == 0) {
  61.192 +          // remove size record once size drops to 0
  61.193 +          malloc_snapshot_itr.remove();
  61.194 +        } else {
  61.195 +          assign_pointer(matched_rec, new_rec);
  61.196 +        }
  61.197        } else {
  61.198          // a deallocation record
  61.199          assert(new_rec->is_deallocation_record(), "Sanity check");
  61.200          // an arena record can be followed by a size record, we need to remove both
  61.201          if (matched_rec->is_arena_record()) {
  61.202            MemPointerRecord* next = (MemPointerRecord*)malloc_snapshot_itr.peek_next();
  61.203 -          if (next->is_arena_size_record()) {
  61.204 -            // it has to match the arena record
  61.205 -            assert(next->is_size_record_of_arena(matched_rec), "Sanity check");
  61.206 +          if (next->is_arena_memory_record() && next->is_memory_record_of_arena(matched_rec)) {
  61.207              malloc_snapshot_itr.remove();
  61.208            }
  61.209          }
  61.210 @@ -528,17 +528,13 @@
  61.211          malloc_snapshot_itr.remove();
  61.212        }
  61.213      } else {
  61.214 -      // it is a new record, insert into snapshot
  61.215 -      if (new_rec->is_arena_size_record()) {
  61.216 -        MemPointerRecord* prev = (MemPointerRecord*)malloc_snapshot_itr.peek_prev();
  61.217 -        if (prev == NULL || !prev->is_arena_record() || !new_rec->is_size_record_of_arena(prev)) {
  61.218 -          // no matched arena record, ignore the size record
  61.219 -          new_rec = NULL;
  61.220 -        }
  61.221 +      // don't insert size 0 record
  61.222 +      if (new_rec->is_arena_memory_record() && new_rec->size() == 0) {
  61.223 +        new_rec = NULL;
  61.224        }
  61.225 -      // only 'live' record can go into snapshot
  61.226 +
  61.227        if (new_rec != NULL) {
  61.228 -        if  (new_rec->is_allocation_record() || new_rec->is_arena_size_record()) {
  61.229 +        if  (new_rec->is_allocation_record() || new_rec->is_arena_memory_record()) {
  61.230            if (matched_rec != NULL && new_rec->addr() > matched_rec->addr()) {
  61.231              if (!malloc_snapshot_itr.insert_after(new_rec)) {
  61.232                return false;
    62.1 --- a/src/share/vm/services/memSnapshot.hpp	Fri Nov 16 09:59:08 2012 +0100
    62.2 +++ b/src/share/vm/services/memSnapshot.hpp	Fri Nov 16 09:19:12 2012 -0500
    62.3 @@ -31,7 +31,6 @@
    62.4  #include "services/memBaseline.hpp"
    62.5  #include "services/memPtrArray.hpp"
    62.6  
    62.7 -
    62.8  // Snapshot pointer array iterator
    62.9  
   62.10  // The pointer array contains malloc-ed pointers
   62.11 @@ -165,39 +164,58 @@
   62.12  };
   62.13  
   62.14  class MallocRecordIterator : public MemPointerArrayIterator {
   62.15 - protected:
   62.16 + private:
   62.17    MemPointerArrayIteratorImpl  _itr;
   62.18  
   62.19 +
   62.20 +
   62.21   public:
   62.22    MallocRecordIterator(MemPointerArray* arr) : _itr(arr) {
   62.23    }
   62.24  
   62.25    virtual MemPointer* current() const {
   62.26 -    MemPointerRecord* cur = (MemPointerRecord*)_itr.current();
   62.27 -    assert(cur == NULL || !cur->is_vm_pointer(), "seek error");
   62.28 -    MemPointerRecord* next = (MemPointerRecord*)_itr.peek_next();
   62.29 -    if (next == NULL || next->addr() != cur->addr()) {
   62.30 -      return cur;
   62.31 -    } else {
   62.32 -      assert(!cur->is_vm_pointer(), "Sanity check");
   62.33 -      assert(cur->is_allocation_record() && next->is_deallocation_record(),
   62.34 -             "sorting order");
   62.35 -      assert(cur->seq() != next->seq(), "Sanity check");
   62.36 -      return cur->seq() >  next->seq() ? cur : next;
   62.37 +#ifdef ASSERT
   62.38 +    MemPointer* cur_rec = _itr.current();
   62.39 +    if (cur_rec != NULL) {
   62.40 +      MemPointer* prev_rec = _itr.peek_prev();
   62.41 +      MemPointer* next_rec = _itr.peek_next();
   62.42 +      assert(prev_rec == NULL || prev_rec->addr() < cur_rec->addr(), "Sorting order");
   62.43 +      assert(next_rec == NULL || next_rec->addr() > cur_rec->addr(), "Sorting order");
   62.44      }
   62.45 +#endif
   62.46 +    return _itr.current();
   62.47    }
   62.48 -
   62.49    virtual MemPointer* next() {
   62.50 -    MemPointerRecord* cur = (MemPointerRecord*)_itr.current();
   62.51 -    assert(cur == NULL || !cur->is_vm_pointer(), "Sanity check");
   62.52 -    MemPointerRecord* next = (MemPointerRecord*)_itr.next();
   62.53 -    if (next == NULL) {
   62.54 -      return NULL;
   62.55 +    MemPointerRecord* next_rec = (MemPointerRecord*)_itr.next();
   62.56 +    // arena memory record is a special case, which we have to compare
   62.57 +    // sequence number against its associated arena record.
   62.58 +    if (next_rec != NULL && next_rec->is_arena_memory_record()) {
   62.59 +      MemPointerRecord* prev_rec = (MemPointerRecord*)_itr.peek_prev();
   62.60 +      // if there is an associated arena record, it has to be previous
   62.61 +      // record because of sorting order (by address) - NMT generates a pseudo address
   62.62 +      // for arena's size record by offsetting arena's address, that guarantees
   62.63 +      // the order of arena record and it's size record.
   62.64 +      if (prev_rec != NULL && prev_rec->is_arena_record() &&
   62.65 +        next_rec->is_memory_record_of_arena(prev_rec)) {
   62.66 +        if (prev_rec->seq() > next_rec->seq()) {
   62.67 +          // Skip this arena memory record
   62.68 +          // Two scenarios:
   62.69 +          //   - if the arena record is an allocation record, this early
   62.70 +          //     size record must be leftover by previous arena,
   62.71 +          //     and the last size record should have size = 0.
   62.72 +          //   - if the arena record is a deallocation record, this
   62.73 +          //     size record should be its cleanup record, which should
   62.74 +          //     also have size = 0. In other world, arena alway reset
   62.75 +          //     its size before gone (see Arena's destructor)
   62.76 +          assert(next_rec->size() == 0, "size not reset");
   62.77 +          return _itr.next();
   62.78 +        } else {
   62.79 +          assert(prev_rec->is_allocation_record(),
   62.80 +            "Arena size record ahead of allocation record");
   62.81 +        }
   62.82 +      }
   62.83      }
   62.84 -    if (cur->addr() == next->addr()) {
   62.85 -      next = (MemPointerRecord*)_itr.next();
   62.86 -    }
   62.87 -    return current();
   62.88 +    return next_rec;
   62.89    }
   62.90  
   62.91    MemPointer* peek_next() const      { ShouldNotReachHere(); return NULL; }
   62.92 @@ -213,9 +231,12 @@
   62.93  // still chances seeing duplicated records during promotion.
   62.94  // We want to use the record with higher sequence number, because it has
   62.95  // more accurate callsite pc.
   62.96 -class VMRecordIterator : public MallocRecordIterator {
   62.97 +class VMRecordIterator : public MemPointerArrayIterator {
   62.98 + private:
   62.99 +  MemPointerArrayIteratorImpl  _itr;
  62.100 +
  62.101   public:
  62.102 -  VMRecordIterator(MemPointerArray* arr) : MallocRecordIterator(arr) {
  62.103 +  VMRecordIterator(MemPointerArray* arr) : _itr(arr) {
  62.104      MemPointerRecord* cur = (MemPointerRecord*)_itr.current();
  62.105      MemPointerRecord* next = (MemPointerRecord*)_itr.peek_next();
  62.106      while (next != NULL) {
  62.107 @@ -256,6 +277,12 @@
  62.108      return cur;
  62.109    }
  62.110  
  62.111 +  MemPointer* peek_next() const      { ShouldNotReachHere(); return NULL; }
  62.112 +  MemPointer* peek_prev() const      { ShouldNotReachHere(); return NULL; }
  62.113 +  void remove()                      { ShouldNotReachHere(); }
  62.114 +  bool insert(MemPointer* ptr)       { ShouldNotReachHere(); return false; }
  62.115 +  bool insert_after(MemPointer* ptr) { ShouldNotReachHere(); return false; }
  62.116 +
  62.117   private:
  62.118    bool is_duplicated_record(MemPointerRecord* p1, MemPointerRecord* p2) const {
  62.119      bool ret = (p1->addr() == p2->addr() && p1->size() == p2->size() && p1->flags() == p2->flags());
  62.120 @@ -348,8 +375,10 @@
  62.121    DEBUG_ONLY( void dump_all_vm_pointers();)
  62.122  
  62.123   private:
  62.124 -   // copy pointer data from src to dest
  62.125 -   void copy_pointer(MemPointerRecord* dest, const MemPointerRecord* src);
  62.126 +   // copy sequenced pointer from src to dest
  62.127 +   void copy_seq_pointer(MemPointerRecord* dest, const MemPointerRecord* src);
  62.128 +   // assign a sequenced pointer to non-sequenced pointer
  62.129 +   void assign_pointer(MemPointerRecord*dest, const MemPointerRecord* src);
  62.130  
  62.131     bool promote_malloc_records(MemPointerArrayIterator* itr);
  62.132     bool promote_virtual_memory_records(MemPointerArrayIterator* itr);
    63.1 --- a/src/share/vm/services/memTracker.hpp	Fri Nov 16 09:59:08 2012 +0100
    63.2 +++ b/src/share/vm/services/memTracker.hpp	Fri Nov 16 09:19:12 2012 -0500
    63.3 @@ -284,14 +284,14 @@
    63.4      }
    63.5    }
    63.6  
    63.7 -  // record arena size
    63.8 +  // record arena memory size
    63.9    static inline void record_arena_size(address addr, size_t size) {
   63.10 -    // we add a positive offset to arena address, so we can have arena size record
   63.11 +    // we add a positive offset to arena address, so we can have arena memory record
   63.12      // sorted after arena record
   63.13      if (is_on() && !UseMallocOnly) {
   63.14        assert(addr != NULL, "Sanity check");
   63.15        create_memory_record((addr + sizeof(void*)), MemPointerRecord::arena_size_tag(), size,
   63.16 -        0, NULL);
   63.17 +        DEBUG_CALLER_PC, NULL);
   63.18      }
   63.19    }
   63.20  
    64.1 --- a/src/share/vm/services/serviceUtil.hpp	Fri Nov 16 09:59:08 2012 +0100
    64.2 +++ b/src/share/vm/services/serviceUtil.hpp	Fri Nov 16 09:19:12 2012 -0500
    64.3 @@ -57,14 +57,13 @@
    64.4        if (k->is_klass()) {
    64.5          // if it's a class for an object, an object array, or
    64.6          // primitive (type) array then it's visible.
    64.7 -        Klass* klass = k;
    64.8 -        if (Klass::cast(klass)->oop_is_instance()) {
    64.9 +        if (k->oop_is_instance()) {
   64.10            return true;
   64.11          }
   64.12 -        if (Klass::cast(klass)->oop_is_objArray()) {
   64.13 +        if (k->oop_is_objArray()) {
   64.14            return true;
   64.15          }
   64.16 -        if (Klass::cast(klass)->oop_is_typeArray()) {
   64.17 +        if (k->oop_is_typeArray()) {
   64.18            return true;
   64.19          }
   64.20        }
    65.1 --- a/src/share/vm/utilities/globalDefinitions.hpp	Fri Nov 16 09:59:08 2012 +0100
    65.2 +++ b/src/share/vm/utilities/globalDefinitions.hpp	Fri Nov 16 09:19:12 2012 -0500
    65.3 @@ -328,6 +328,12 @@
    65.4  
    65.5  
    65.6  //----------------------------------------------------------------------------------------------------
    65.7 +// Minimum StringTableSize value
    65.8 +
    65.9 +const int defaultStringTableSize=1009;
   65.10 +
   65.11 +
   65.12 +//----------------------------------------------------------------------------------------------------
   65.13  // HotSwap - for JVMTI   aka Class File Replacement and PopFrame
   65.14  //
   65.15  // Determines whether on-the-fly class replacement and frame popping are enabled.

mercurial