48 virtualFieldOffset = type.getField("_virtual").getOffset();
49 forwardingFieldOffset = type.getField("_forwarding").getOffset();
50 }
51
52 public ZPage(Address addr) {
53 super(addr);
54 }
55
56 private byte type() {
57 return typeField.getJByte(addr);
58 }
59
60 private ZVirtualMemory virtual() {
61 return (ZVirtualMemory)VMObjectFactory.newObject(ZVirtualMemory.class, addr.addOffsetTo(virtualFieldOffset));
62 }
63
64 private ZForwardingTable forwarding() {
65 return (ZForwardingTable)VMObjectFactory.newObject(ZForwardingTable.class, addr.addOffsetTo(forwardingFieldOffset));
66 }
67
68 private long start() {
69 return virtual().start();
70 }
71
72 Address forward_object(Address from) {
73 // Lookup address in forwarding table
74 long from_offset = ZAddress.offset(from);
75 long from_index = (from_offset - start()) >> object_alignment_shift();
76 ZForwardingTableEntry entry = forwarding().find(from_index);
77 assert(!entry.is_empty());
78 assert(entry.from_index() == from_index);
79
80 return ZAddress.good(entry.to_offset());
81 }
82
83 Address relocate_object(Address from) {
84 // Lookup address in forwarding table
85 long from_offset = ZAddress.offset(from);
86 long from_index = (from_offset - start()) >> object_alignment_shift();
87 ZForwardingTableEntry entry = forwarding().find(from_index);
88 if (!entry.is_empty() && entry.from_index() == from_index) {
89 return ZAddress.good(entry.to_offset());
|
48 virtualFieldOffset = type.getField("_virtual").getOffset();
49 forwardingFieldOffset = type.getField("_forwarding").getOffset();
50 }
51
52 public ZPage(Address addr) {
53 super(addr);
54 }
55
56 private byte type() {
57 return typeField.getJByte(addr);
58 }
59
60 private ZVirtualMemory virtual() {
61 return (ZVirtualMemory)VMObjectFactory.newObject(ZVirtualMemory.class, addr.addOffsetTo(virtualFieldOffset));
62 }
63
64 private ZForwardingTable forwarding() {
65 return (ZForwardingTable)VMObjectFactory.newObject(ZForwardingTable.class, addr.addOffsetTo(forwardingFieldOffset));
66 }
67
68 long start() {
69 return virtual().start();
70 }
71
72 long size() {
73 return virtual().end() - virtual().start();
74 }
75
76 Address forward_object(Address from) {
77 // Lookup address in forwarding table
78 long from_offset = ZAddress.offset(from);
79 long from_index = (from_offset - start()) >> object_alignment_shift();
80 ZForwardingTableEntry entry = forwarding().find(from_index);
81 assert(!entry.is_empty());
82 assert(entry.from_index() == from_index);
83
84 return ZAddress.good(entry.to_offset());
85 }
86
87 Address relocate_object(Address from) {
88 // Lookup address in forwarding table
89 long from_offset = ZAddress.offset(from);
90 long from_index = (from_offset - start()) >> object_alignment_shift();
91 ZForwardingTableEntry entry = forwarding().find(from_index);
92 if (!entry.is_empty() && entry.from_index() == from_index) {
93 return ZAddress.good(entry.to_offset());
|