Mercurial > hg > truffle
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); |