equal
deleted
inserted
replaced
45 } |
45 } |
46 |
46 |
47 private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { |
47 private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { |
48 Type type = db.lookupType("oopDesc"); |
48 Type type = db.lookupType("oopDesc"); |
49 mark = new CIntField(type.getCIntegerField("_mark"), 0); |
49 mark = new CIntField(type.getCIntegerField("_mark"), 0); |
50 klass = new OopField(type.getOopField("_klass"), 0); |
50 klass = new OopField(type.getOopField("_metadata._klass"), 0); |
|
51 compressedKlass = new NarrowOopField(type.getOopField("_metadata._compressed_klass"), 0); |
51 headerSize = type.getSize(); |
52 headerSize = type.getSize(); |
52 } |
53 } |
53 |
54 |
54 private OopHandle handle; |
55 private OopHandle handle; |
55 private ObjectHeap heap; |
56 private ObjectHeap heap; |
65 package; is needed, however, by {@link |
66 package; is needed, however, by {@link |
66 sun.jvm.hotspot.utilities.MarkBits}. */ |
67 sun.jvm.hotspot.utilities.MarkBits}. */ |
67 public OopHandle getHandle() { return handle; } |
68 public OopHandle getHandle() { return handle; } |
68 |
69 |
69 private static long headerSize; |
70 private static long headerSize; |
70 public static long getHeaderSize() { return headerSize; } |
71 public static long getHeaderSize() { return headerSize; } // Header size in bytes. |
71 |
72 |
72 private static CIntField mark; |
73 private static CIntField mark; |
73 private static OopField klass; |
74 private static OopField klass; |
|
75 private static NarrowOopField compressedKlass; |
74 |
76 |
75 public boolean isShared() { |
77 public boolean isShared() { |
76 return CompactingPermGenGen.isShared(handle); |
78 return CompactingPermGenGen.isShared(handle); |
77 } |
79 } |
78 |
80 |
84 return CompactingPermGenGen.isSharedReadWrite(handle); |
86 return CompactingPermGenGen.isSharedReadWrite(handle); |
85 } |
87 } |
86 |
88 |
87 // Accessors for declared fields |
89 // Accessors for declared fields |
88 public Mark getMark() { return new Mark(getHandle()); } |
90 public Mark getMark() { return new Mark(getHandle()); } |
89 public Klass getKlass() { return (Klass) klass.getValue(this); } |
91 public Klass getKlass() { |
|
92 if (VM.getVM().isCompressedOopsEnabled()) { |
|
93 return (Klass) compressedKlass.getValue(this); |
|
94 } else { |
|
95 return (Klass) klass.getValue(this); |
|
96 } |
|
97 } |
90 |
98 |
91 public boolean isA(Klass k) { |
99 public boolean isA(Klass k) { |
92 return getKlass().isSubtypeOf(k); |
100 return getKlass().isSubtypeOf(k); |
93 } |
101 } |
94 |
102 |
118 public boolean isConstantPoolCache() { return false; } |
126 public boolean isConstantPoolCache() { return false; } |
119 public boolean isCompiledICHolder() { return false; } |
127 public boolean isCompiledICHolder() { return false; } |
120 |
128 |
121 // Align the object size. |
129 // Align the object size. |
122 public static long alignObjectSize(long size) { |
130 public static long alignObjectSize(long size) { |
123 return VM.getVM().alignUp(size, VM.getVM().getMinObjAlignmentInBytes()); |
131 return VM.getVM().alignUp(size, VM.getVM().getMinObjAlignment()); |
124 } |
132 } |
125 |
133 |
126 // All vm's align longs, so pad out certain offsets. |
134 // All vm's align longs, so pad out certain offsets. |
127 public static long alignObjectOffset(long offset) { |
135 public static long alignObjectOffset(long offset) { |
128 return VM.getVM().alignUp(offset, VM.getVM().getBytesPerLong()); |
136 return VM.getVM().alignUp(offset, VM.getVM().getBytesPerLong()); |
161 } |
169 } |
162 |
170 |
163 void iterateFields(OopVisitor visitor, boolean doVMFields) { |
171 void iterateFields(OopVisitor visitor, boolean doVMFields) { |
164 if (doVMFields) { |
172 if (doVMFields) { |
165 visitor.doCInt(mark, true); |
173 visitor.doCInt(mark, true); |
166 visitor.doOop(klass, true); |
174 if (VM.getVM().isCompressedOopsEnabled()) { |
|
175 visitor.doOop(compressedKlass, true); |
|
176 } else { |
|
177 visitor.doOop(klass, true); |
|
178 } |
167 } |
179 } |
168 } |
180 } |
169 |
181 |
170 public void print() { printOn(System.out); } |
182 public void print() { printOn(System.out); } |
171 public void printValue() { printValueOn(System.out); } |
183 public void printValue() { printValueOn(System.out); } |
217 // Package-private routine to speed up ObjectHeap.newOop |
229 // Package-private routine to speed up ObjectHeap.newOop |
218 static OopHandle getKlassForOopHandle(OopHandle handle) { |
230 static OopHandle getKlassForOopHandle(OopHandle handle) { |
219 if (handle == null) { |
231 if (handle == null) { |
220 return null; |
232 return null; |
221 } |
233 } |
222 return handle.getOopHandleAt(klass.getOffset()); |
234 if (VM.getVM().isCompressedOopsEnabled()) { |
|
235 return handle.getCompOopHandleAt(compressedKlass.getOffset()); |
|
236 } else { |
|
237 return handle.getOopHandleAt(klass.getOffset()); |
|
238 } |
223 } |
239 } |
224 }; |
240 }; |