diff src/share/vm/ci/ciKlass.cpp @ 6725:da91efe96a93

6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents 1d1603768966
children e522a00b91aa 6171eb9da4fd
line wrap: on
line diff
--- a/src/share/vm/ci/ciKlass.cpp	Fri Aug 31 16:39:35 2012 -0700
+++ b/src/share/vm/ci/ciKlass.cpp	Sat Sep 01 13:25:18 2012 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,13 +30,13 @@
 
 // ciKlass
 //
-// This class represents a klassOop in the HotSpot virtual
+// This class represents a Klass* in the HotSpot virtual
 // machine.
 
 // ------------------------------------------------------------------
 // ciKlass::ciKlass
 ciKlass::ciKlass(KlassHandle h_k) : ciType(h_k) {
-  assert(get_oop()->is_klass(), "wrong type");
+  assert(get_Klass()->is_klass(), "wrong type");
   Klass* k = get_Klass();
   _layout_helper = k->layout_helper();
   Symbol* klass_name = k->name();
@@ -49,7 +49,7 @@
 //
 // Nameless klass variant.
 ciKlass::ciKlass(KlassHandle h_k, ciSymbol* name) : ciType(h_k) {
-  assert(get_oop()->is_klass(), "wrong type");
+  assert(get_Klass()->is_klass(), "wrong type");
   _name = name;
   _layout_helper = Klass::_lh_neutral_value;
 }
@@ -58,7 +58,7 @@
 // ciKlass::ciKlass
 //
 // Unloaded klass variant.
-ciKlass::ciKlass(ciSymbol* name, ciKlass* klass) : ciType(klass) {
+ciKlass::ciKlass(ciSymbol* name, BasicType bt) : ciType(bt) {
   _name = name;
   _layout_helper = Klass::_lh_neutral_value;
 }
@@ -67,7 +67,6 @@
 // ciKlass::is_subtype_of
 bool ciKlass::is_subtype_of(ciKlass* that) {
   assert(is_loaded() && that->is_loaded(), "must be loaded");
-  assert(is_java_klass() && that->is_java_klass(), "must be java klasses");
   // Check to see if the klasses are identical.
   if (this == that) {
     return true;
@@ -75,7 +74,7 @@
 
   VM_ENTRY_MARK;
   Klass* this_klass = get_Klass();
-  klassOop that_klass = that->get_klassOop();
+  Klass* that_klass = that->get_Klass();
   bool result = this_klass->is_subtype_of(that_klass);
 
   return result;
@@ -85,12 +84,11 @@
 // ciKlass::is_subclass_of
 bool ciKlass::is_subclass_of(ciKlass* that) {
   assert(is_loaded() && that->is_loaded(), "must be loaded");
-  assert(is_java_klass() && that->is_java_klass(), "must be java klasses");
   // Check to see if the klasses are identical.
 
   VM_ENTRY_MARK;
   Klass* this_klass = get_Klass();
-  klassOop that_klass = that->get_klassOop();
+  Klass* that_klass = that->get_Klass();
   bool result = this_klass->is_subclass_of(that_klass);
 
   return result;
@@ -100,7 +98,6 @@
 // ciKlass::super_depth
 juint ciKlass::super_depth() {
   assert(is_loaded(), "must be loaded");
-  assert(is_java_klass(), "must be java klasses");
 
   VM_ENTRY_MARK;
   Klass* this_klass = get_Klass();
@@ -111,7 +108,6 @@
 // ciKlass::super_check_offset
 juint ciKlass::super_check_offset() {
   assert(is_loaded(), "must be loaded");
-  assert(is_java_klass(), "must be java klasses");
 
   VM_ENTRY_MARK;
   Klass* this_klass = get_Klass();
@@ -122,19 +118,17 @@
 // ciKlass::super_of_depth
 ciKlass* ciKlass::super_of_depth(juint i) {
   assert(is_loaded(), "must be loaded");
-  assert(is_java_klass(), "must be java klasses");
 
   VM_ENTRY_MARK;
   Klass* this_klass = get_Klass();
-  klassOop super = this_klass->primary_super_of_depth(i);
-  return (super != NULL) ? CURRENT_THREAD_ENV->get_object(super)->as_klass() : NULL;
+  Klass* super = this_klass->primary_super_of_depth(i);
+  return (super != NULL) ? CURRENT_THREAD_ENV->get_klass(super) : NULL;
 }
 
 // ------------------------------------------------------------------
 // ciKlass::can_be_primary_super
 bool ciKlass::can_be_primary_super() {
   assert(is_loaded(), "must be loaded");
-  assert(is_java_klass(), "must be java klasses");
 
   VM_ENTRY_MARK;
   Klass* this_klass = get_Klass();
@@ -156,7 +150,6 @@
 ciKlass*
 ciKlass::least_common_ancestor(ciKlass* that) {
   assert(is_loaded() && that->is_loaded(), "must be loaded");
-  assert(is_java_klass() && that->is_java_klass(), "must be java klasses");
   // Check to see if the klasses are identical.
   if (this == that) {
     return this;
@@ -178,7 +171,7 @@
 
   // Create the ciInstanceKlass for the lca.
   ciKlass* result =
-    CURRENT_THREAD_ENV->get_object(lca->as_klassOop())->as_klass();
+    CURRENT_THREAD_ENV->get_klass(lca);
 
   return result;
 }
@@ -204,7 +197,7 @@
     if (!is_loaded())
       return ciEnv::current()->get_unloaded_klass_mirror(this);
     oop java_mirror = get_Klass()->java_mirror();
-    return CURRENT_ENV->get_object(java_mirror)->as_instance();
+    return CURRENT_ENV->get_instance(java_mirror);
   )
 }