diff src/share/vm/code/debugInfo.hpp @ 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 f95d63e2154a
children b6a8f2d23057 e0c9a1d29eb4
line wrap: on
line diff
--- a/src/share/vm/code/debugInfo.hpp	Fri Aug 31 16:39:35 2012 -0700
+++ b/src/share/vm/code/debugInfo.hpp	Sat Sep 01 13:25:18 2012 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -40,6 +40,8 @@
 // - LocationValue   describes a value in a given location (in frame or register)
 // - ConstantValue   describes a constant
 
+class ConstantOopReadValue;
+
 class ScopeValue: public ResourceObj {
  public:
   // Testers
@@ -51,6 +53,11 @@
   virtual bool is_constant_oop() const { return false; }
   virtual bool equals(ScopeValue* other) const { return false; }
 
+  ConstantOopReadValue* as_ConstantOopReadValue() {
+    assert(is_constant_oop(), "must be");
+    return (ConstantOopReadValue*) this;
+  }
+
   // Serialization of debugging information
   virtual void write_on(DebugInfoWriteStream* stream) = 0;
   static ScopeValue* read_from(DebugInfoReadStream* stream);
@@ -94,7 +101,7 @@
      , _field_values()
      , _value()
      , _visited(false) {
-    assert(klass->is_constant_oop(), "should be constant klass oop");
+    assert(klass->is_constant_oop(), "should be constant java mirror oop");
   }
 
   ObjectValue(int id)
@@ -260,7 +267,15 @@
   } ;
 
   oop read_oop() {
-    return code()->oop_at(read_int());
+    oop o = code()->oop_at(read_int());
+    assert(o == NULL || o->is_oop(), "oop only");
+    return o;
+  }
+  Method* read_method() {
+    Method* o = (Method*)(code()->metadata_at(read_int()));
+    assert(o == NULL ||
+           o->is_metadata(), "meta data only");
+    return o;
   }
   ScopeValue* read_object_value();
   ScopeValue* get_cached_object();
@@ -279,6 +294,8 @@
   DebugInfoWriteStream(DebugInformationRecorder* recorder, int initial_size);
   void write_handle(jobject h);
   void write_bci(int bci) { write_int(bci - InvocationEntryBci); }
+
+  void write_metadata(Metadata* m);
 };
 
 #endif // SHARE_VM_CODE_DEBUGINFO_HPP