comparison 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
comparison
equal deleted inserted replaced
6724:36d1d483d5d6 6725:da91efe96a93
1 /* 1 /*
2 * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
40 private static VirtualConstructor heapConstructor; 40 private static VirtualConstructor heapConstructor;
41 private static sun.jvm.hotspot.types.OopField mainThreadGroupField; 41 private static sun.jvm.hotspot.types.OopField mainThreadGroupField;
42 private static sun.jvm.hotspot.types.OopField systemThreadGroupField; 42 private static sun.jvm.hotspot.types.OopField systemThreadGroupField;
43 43
44 // single dimensional primitive array klasses 44 // single dimensional primitive array klasses
45 private static sun.jvm.hotspot.types.OopField boolArrayKlassObjField; 45 private static sun.jvm.hotspot.types.AddressField boolArrayKlassField;
46 private static sun.jvm.hotspot.types.OopField byteArrayKlassObjField; 46 private static sun.jvm.hotspot.types.AddressField byteArrayKlassField;
47 private static sun.jvm.hotspot.types.OopField charArrayKlassObjField; 47 private static sun.jvm.hotspot.types.AddressField charArrayKlassField;
48 private static sun.jvm.hotspot.types.OopField intArrayKlassObjField; 48 private static sun.jvm.hotspot.types.AddressField intArrayKlassField;
49 private static sun.jvm.hotspot.types.OopField shortArrayKlassObjField; 49 private static sun.jvm.hotspot.types.AddressField shortArrayKlassField;
50 private static sun.jvm.hotspot.types.OopField longArrayKlassObjField; 50 private static sun.jvm.hotspot.types.AddressField longArrayKlassField;
51 private static sun.jvm.hotspot.types.OopField singleArrayKlassObjField; 51 private static sun.jvm.hotspot.types.AddressField singleArrayKlassField;
52 private static sun.jvm.hotspot.types.OopField doubleArrayKlassObjField; 52 private static sun.jvm.hotspot.types.AddressField doubleArrayKlassField;
53
54 // system obj array klass object
55 private static sun.jvm.hotspot.types.OopField systemObjArrayKlassObjField;
56 53
57 private static AddressField narrowOopBaseField; 54 private static AddressField narrowOopBaseField;
58 private static CIntegerField narrowOopShiftField; 55 private static CIntegerField narrowOopShiftField;
59 56
60 static { 57 static {
76 heapConstructor.addMapping("G1CollectedHeap", G1CollectedHeap.class); 73 heapConstructor.addMapping("G1CollectedHeap", G1CollectedHeap.class);
77 74
78 mainThreadGroupField = type.getOopField("_main_thread_group"); 75 mainThreadGroupField = type.getOopField("_main_thread_group");
79 systemThreadGroupField = type.getOopField("_system_thread_group"); 76 systemThreadGroupField = type.getOopField("_system_thread_group");
80 77
81 boolArrayKlassObjField = type.getOopField("_boolArrayKlassObj"); 78 boolArrayKlassField = type.getAddressField("_boolArrayKlassObj");
82 byteArrayKlassObjField = type.getOopField("_byteArrayKlassObj"); 79 byteArrayKlassField = type.getAddressField("_byteArrayKlassObj");
83 charArrayKlassObjField = type.getOopField("_charArrayKlassObj"); 80 charArrayKlassField = type.getAddressField("_charArrayKlassObj");
84 intArrayKlassObjField = type.getOopField("_intArrayKlassObj"); 81 intArrayKlassField = type.getAddressField("_intArrayKlassObj");
85 shortArrayKlassObjField = type.getOopField("_shortArrayKlassObj"); 82 shortArrayKlassField = type.getAddressField("_shortArrayKlassObj");
86 longArrayKlassObjField = type.getOopField("_longArrayKlassObj"); 83 longArrayKlassField = type.getAddressField("_longArrayKlassObj");
87 singleArrayKlassObjField = type.getOopField("_singleArrayKlassObj"); 84 singleArrayKlassField = type.getAddressField("_singleArrayKlassObj");
88 doubleArrayKlassObjField = type.getOopField("_doubleArrayKlassObj"); 85 doubleArrayKlassField = type.getAddressField("_doubleArrayKlassObj");
89
90 systemObjArrayKlassObjField = type.getOopField("_systemObjArrayKlassObj");
91 86
92 narrowOopBaseField = type.getAddressField("_narrow_oop._base"); 87 narrowOopBaseField = type.getAddressField("_narrow_oop._base");
93 narrowOopShiftField = type.getCIntegerField("_narrow_oop._shift"); 88 narrowOopShiftField = type.getCIntegerField("_narrow_oop._shift");
94 } 89 }
95 90
136 131
137 public Oop systemThreadGroup() { 132 public Oop systemThreadGroup() {
138 return newOop(systemThreadGroupField.getValue()); 133 return newOop(systemThreadGroupField.getValue());
139 } 134 }
140 135
141 public Oop systemObjArrayKlassObj() {
142 return newOop(systemObjArrayKlassObjField.getValue());
143 }
144
145 // iterate through the single dimensional primitive array klasses 136 // iterate through the single dimensional primitive array klasses
146 // refer to basic_type_classes_do(void f(klassOop)) in universe.cpp 137 // refer to basic_type_classes_do(void f(Klass*)) in universe.cpp
147 public void basicTypeClassesDo(SystemDictionary.ClassVisitor visitor) { 138 public void basicTypeClassesDo(SystemDictionary.ClassVisitor visitor) {
148 visitor.visit((Klass)newOop(boolArrayKlassObjField.getValue())); 139 visitor.visit(new TypeArrayKlass(boolArrayKlassField.getValue()));
149 visitor.visit((Klass)newOop(byteArrayKlassObjField.getValue())); 140 visitor.visit(new TypeArrayKlass(byteArrayKlassField.getValue()));
150 visitor.visit((Klass)newOop(charArrayKlassObjField.getValue())); 141 visitor.visit(new TypeArrayKlass(charArrayKlassField.getValue()));
151 visitor.visit((Klass)newOop(intArrayKlassObjField.getValue())); 142 visitor.visit(new TypeArrayKlass(intArrayKlassField.getValue()));
152 visitor.visit((Klass)newOop(shortArrayKlassObjField.getValue())); 143 visitor.visit(new TypeArrayKlass(shortArrayKlassField.getValue()));
153 visitor.visit((Klass)newOop(longArrayKlassObjField.getValue())); 144 visitor.visit(new TypeArrayKlass(longArrayKlassField.getValue()));
154 visitor.visit((Klass)newOop(singleArrayKlassObjField.getValue())); 145 visitor.visit(new TypeArrayKlass(singleArrayKlassField.getValue()));
155 visitor.visit((Klass)newOop(doubleArrayKlassObjField.getValue())); 146 visitor.visit(new TypeArrayKlass(doubleArrayKlassField.getValue()));
156 } 147 }
157 148
158 public void print() { printOn(System.out); } 149 public void print() { printOn(System.out); }
159 public void printOn(PrintStream tty) { 150 public void printOn(PrintStream tty) {
160 heap().printOn(tty); 151 heap().printOn(tty);