38
39 public class InstanceMirrorKlass extends InstanceKlass {
40 static {
41 VM.registerVMInitializedObserver(new Observer() {
42 public void update(Observable o, Object data) {
43 initialize(VM.getVM().getTypeDataBase());
44 }
45 });
46 }
47
48 private static synchronized void initialize(TypeDataBase db) throws WrongTypeException {
49 // Just make sure it's there for now
50 Type type = db.lookupType("InstanceMirrorKlass");
51 }
52
53 public InstanceMirrorKlass(Address addr) {
54 super(addr);
55 }
56
57 public long getObjectSize(Oop o) {
58 return java_lang_Class.getOopSize(o) * VM.getVM().getAddressSize();
59 }
60
61 public void iterateNonStaticFields(OopVisitor visitor, Oop obj) {
62 super.iterateNonStaticFields(visitor, obj);
63 // Fetch the real klass from the mirror object
64 Klass klass = java_lang_Class.asKlass(obj);
65 if (klass instanceof InstanceKlass) {
66 ((InstanceKlass)klass).iterateStaticFields(visitor);
67 }
68 }
69 }
|
38
39 public class InstanceMirrorKlass extends InstanceKlass {
40 static {
41 VM.registerVMInitializedObserver(new Observer() {
42 public void update(Observable o, Object data) {
43 initialize(VM.getVM().getTypeDataBase());
44 }
45 });
46 }
47
48 private static synchronized void initialize(TypeDataBase db) throws WrongTypeException {
49 // Just make sure it's there for now
50 Type type = db.lookupType("InstanceMirrorKlass");
51 }
52
53 public InstanceMirrorKlass(Address addr) {
54 super(addr);
55 }
56
57 public long getObjectSize(Oop o) {
58 long s = java_lang_Class.getOopSize(o) * VM.getVM().getAddressSize();
59 if (VM.getVM().isCompactObjectHeadersEnabled()) {
60 Mark mark = o.getMark();
61 if (mark.isExpanded()) {
62 // Needs extra 4 bytes for identity hash-code (and align-up to whole word).
63 s += VM.getVM().getAddressSize();
64 }
65 }
66 return s;
67 }
68
69 public void iterateNonStaticFields(OopVisitor visitor, Oop obj) {
70 super.iterateNonStaticFields(visitor, obj);
71 // Fetch the real klass from the mirror object
72 Klass klass = java_lang_Class.asKlass(obj);
73 if (klass instanceof InstanceKlass) {
74 ((InstanceKlass)klass).iterateStaticFields(visitor);
75 }
76 }
77 }
|