diff agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java @ 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 4f93f0d00802
children 8e47bac5643a
line wrap: on
line diff
--- a/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java	Fri Aug 31 16:39:35 2012 -0700
+++ b/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java	Sat Sep 01 13:25:18 2012 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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
@@ -42,17 +42,14 @@
   private static sun.jvm.hotspot.types.OopField systemThreadGroupField;
 
   // single dimensional primitive array klasses
-  private static sun.jvm.hotspot.types.OopField boolArrayKlassObjField;
-  private static sun.jvm.hotspot.types.OopField byteArrayKlassObjField;
-  private static sun.jvm.hotspot.types.OopField charArrayKlassObjField;
-  private static sun.jvm.hotspot.types.OopField intArrayKlassObjField;
-  private static sun.jvm.hotspot.types.OopField shortArrayKlassObjField;
-  private static sun.jvm.hotspot.types.OopField longArrayKlassObjField;
-  private static sun.jvm.hotspot.types.OopField singleArrayKlassObjField;
-  private static sun.jvm.hotspot.types.OopField doubleArrayKlassObjField;
-
-  // system obj array klass object
-  private static sun.jvm.hotspot.types.OopField systemObjArrayKlassObjField;
+  private static sun.jvm.hotspot.types.AddressField boolArrayKlassField;
+  private static sun.jvm.hotspot.types.AddressField byteArrayKlassField;
+  private static sun.jvm.hotspot.types.AddressField charArrayKlassField;
+  private static sun.jvm.hotspot.types.AddressField intArrayKlassField;
+  private static sun.jvm.hotspot.types.AddressField shortArrayKlassField;
+  private static sun.jvm.hotspot.types.AddressField longArrayKlassField;
+  private static sun.jvm.hotspot.types.AddressField singleArrayKlassField;
+  private static sun.jvm.hotspot.types.AddressField doubleArrayKlassField;
 
   private static AddressField narrowOopBaseField;
   private static CIntegerField narrowOopShiftField;
@@ -78,16 +75,14 @@
     mainThreadGroupField   = type.getOopField("_main_thread_group");
     systemThreadGroupField = type.getOopField("_system_thread_group");
 
-    boolArrayKlassObjField = type.getOopField("_boolArrayKlassObj");
-    byteArrayKlassObjField = type.getOopField("_byteArrayKlassObj");
-    charArrayKlassObjField = type.getOopField("_charArrayKlassObj");
-    intArrayKlassObjField = type.getOopField("_intArrayKlassObj");
-    shortArrayKlassObjField = type.getOopField("_shortArrayKlassObj");
-    longArrayKlassObjField = type.getOopField("_longArrayKlassObj");
-    singleArrayKlassObjField = type.getOopField("_singleArrayKlassObj");
-    doubleArrayKlassObjField = type.getOopField("_doubleArrayKlassObj");
-
-    systemObjArrayKlassObjField = type.getOopField("_systemObjArrayKlassObj");
+    boolArrayKlassField      = type.getAddressField("_boolArrayKlassObj");
+    byteArrayKlassField      = type.getAddressField("_byteArrayKlassObj");
+    charArrayKlassField      = type.getAddressField("_charArrayKlassObj");
+    intArrayKlassField       = type.getAddressField("_intArrayKlassObj");
+    shortArrayKlassField     = type.getAddressField("_shortArrayKlassObj");
+    longArrayKlassField      = type.getAddressField("_longArrayKlassObj");
+    singleArrayKlassField    = type.getAddressField("_singleArrayKlassObj");
+    doubleArrayKlassField    = type.getAddressField("_doubleArrayKlassObj");
 
     narrowOopBaseField = type.getAddressField("_narrow_oop._base");
     narrowOopShiftField = type.getCIntegerField("_narrow_oop._shift");
@@ -138,21 +133,17 @@
     return newOop(systemThreadGroupField.getValue());
   }
 
-  public Oop systemObjArrayKlassObj() {
-    return newOop(systemObjArrayKlassObjField.getValue());
-  }
-
   // iterate through the single dimensional primitive array klasses
-  // refer to basic_type_classes_do(void f(klassOop)) in universe.cpp
+  // refer to basic_type_classes_do(void f(Klass*)) in universe.cpp
   public void basicTypeClassesDo(SystemDictionary.ClassVisitor visitor) {
-    visitor.visit((Klass)newOop(boolArrayKlassObjField.getValue()));
-    visitor.visit((Klass)newOop(byteArrayKlassObjField.getValue()));
-    visitor.visit((Klass)newOop(charArrayKlassObjField.getValue()));
-    visitor.visit((Klass)newOop(intArrayKlassObjField.getValue()));
-    visitor.visit((Klass)newOop(shortArrayKlassObjField.getValue()));
-    visitor.visit((Klass)newOop(longArrayKlassObjField.getValue()));
-    visitor.visit((Klass)newOop(singleArrayKlassObjField.getValue()));
-    visitor.visit((Klass)newOop(doubleArrayKlassObjField.getValue()));
+    visitor.visit(new TypeArrayKlass(boolArrayKlassField.getValue()));
+    visitor.visit(new TypeArrayKlass(byteArrayKlassField.getValue()));
+    visitor.visit(new TypeArrayKlass(charArrayKlassField.getValue()));
+    visitor.visit(new TypeArrayKlass(intArrayKlassField.getValue()));
+    visitor.visit(new TypeArrayKlass(shortArrayKlassField.getValue()));
+    visitor.visit(new TypeArrayKlass(longArrayKlassField.getValue()));
+    visitor.visit(new TypeArrayKlass(singleArrayKlassField.getValue()));
+    visitor.visit(new TypeArrayKlass(doubleArrayKlassField.getValue()));
   }
 
   public void print() { printOn(System.out); }