< prev index next >
src/share/vm/gc/shared/space.inline.hpp
Print this page
rev 8961 : [mq]: diff-shenandoah.patch
@@ -119,35 +119,39 @@
const intx interval = PrefetchScanIntervalInBytes;
while (q < t) {
assert(!space->scanned_block_is_obj(q) ||
- oop(q)->mark()->is_marked() || oop(q)->mark()->is_unlocked() ||
- oop(q)->mark()->has_bias_pattern(),
+ space->make_oop(q)->mark()->is_marked() ||
+ oopDesc::bs()->resolve_oop(space->make_oop(q))->mark()->is_marked() ||
+ space->make_oop(q)->mark()->is_unlocked() ||
+ oopDesc::bs()->resolve_oop(space->make_oop(q))->mark()->is_unlocked() ||
+ space->make_oop(q)->mark()->has_bias_pattern() ||
+ oopDesc::bs()->resolve_oop(space->make_oop(q))->mark()->has_bias_pattern(),
"these are the only valid states during a mark sweep");
- if (space->scanned_block_is_obj(q) && oop(q)->is_gc_marked()) {
+ if (space->scanned_block_is_obj(q) && space->make_oop(q)->is_gc_marked()) {
// prefetch beyond q
Prefetch::write(q, interval);
size_t size = space->scanned_block_size(q);
- compact_top = cp->space->forward(oop(q), size, cp, compact_top);
+ compact_top = cp->space->forward(space->make_oop(q), size, cp, compact_top);
q += size;
end_of_live = q;
} else {
// run over all the contiguous dead objects
HeapWord* end = q;
do {
// prefetch beyond end
Prefetch::write(end, interval);
end += space->scanned_block_size(end);
- } while (end < t && (!space->scanned_block_is_obj(end) || !oop(end)->is_gc_marked()));
+ } while (end < t && (!space->scanned_block_is_obj(end) || !space->make_oop(end)->is_gc_marked()));
// see if we might want to pretend this object is alive so that
// we don't have to compact quite as often.
if (allowed_deadspace > 0 && q == compact_top) {
size_t sz = pointer_delta(end, q);
if (space->insert_deadspace(allowed_deadspace, q, sz)) {
- compact_top = cp->space->forward(oop(q), sz, cp, compact_top);
+ compact_top = cp->space->forward(space->make_oop(q), sz, cp, compact_top);
q = end;
end_of_live = end;
continue;
}
}
@@ -159,11 +163,11 @@
liveRange->set_end(q);
}
// record the current LiveRange object.
// liveRange->start() is overlaid on the mark word.
- liveRange = (LiveRange*)q;
+ liveRange = (LiveRange*) (HeapWord*) space->make_oop(q);
liveRange->set_start(end);
liveRange->set_end(end);
// see if this is the first dead region.
if (q < first_dead) {
@@ -197,11 +201,11 @@
HeapWord* q = space->bottom();
HeapWord* t = space->_end_of_live; // Established by "prepare_for_compaction".
assert(space->_first_dead <= space->_end_of_live, "Stands to reason, no?");
- if (q < t && space->_first_dead > q && !oop(q)->is_gc_marked()) {
+ if (q < t && space->_first_dead > q && !space->make_oop(q)->is_gc_marked()) {
// we have a chunk of the space which hasn't moved and we've
// reinitialized the mark word during the previous pass, so we can't
// use is_gc_marked for the traversal.
HeapWord* end = space->_first_dead;
@@ -212,11 +216,11 @@
// after their pointers have been
// updated, until the actual compaction is done. dld, 4/00
assert(space->block_is_obj(q), "should be at block boundaries, and should be looking at objs");
// point all the oops to the new location
- size_t size = MarkSweep::adjust_pointers(oop(q));
+ size_t size = MarkSweep::adjust_pointers(space->make_oop(q));
size = space->adjust_obj_size(size);
q += size;
}
@@ -233,22 +237,22 @@
debug_only(HeapWord* prev_q = NULL);
while (q < t) {
// prefetch beyond q
Prefetch::write(q, interval);
- if (oop(q)->is_gc_marked()) {
+ if (space->make_oop(q)->is_gc_marked()) {
// q is alive
// point all the oops to the new location
- size_t size = MarkSweep::adjust_pointers(oop(q));
+ size_t size = MarkSweep::adjust_pointers(space->make_oop(q));
size = space->adjust_obj_size(size);
debug_only(prev_q = q);
q += size;
} else {
// q is not a live object, so its mark should point at the next
// live object
debug_only(prev_q = q);
- q = (HeapWord*) oop(q)->mark()->decode_pointer();
+ q = (HeapWord*) space->make_oop(q)->mark()->decode_pointer();
assert(q > prev_q, "we should be moving forward through memory");
}
}
assert(q == t, "just checking");
@@ -261,20 +265,20 @@
HeapWord* q = space->bottom();
HeapWord* const t = space->_end_of_live;
debug_only(HeapWord* prev_q = NULL);
- if (q < t && space->_first_dead > q && !oop(q)->is_gc_marked()) {
+ if (q < t && space->_first_dead > q && !space->make_oop(q)->is_gc_marked()) {
#ifdef ASSERT // Debug only
// we have a chunk of the space which hasn't moved and we've reinitialized
// the mark word during the previous pass, so we can't use is_gc_marked for
// the traversal.
HeapWord* const end = space->_first_dead;
while (q < end) {
size_t size = space->obj_size(q);
- assert(!oop(q)->is_gc_marked(), "should be unmarked (special dense prefix handling)");
+ assert(!space->make_oop(q)->is_gc_marked(), "should be unmarked (special dense prefix handling)");
prev_q = q;
q += size;
}
#endif
@@ -287,29 +291,29 @@
}
const intx scan_interval = PrefetchScanIntervalInBytes;
const intx copy_interval = PrefetchCopyIntervalInBytes;
while (q < t) {
- if (!oop(q)->is_gc_marked()) {
+ if (!space->make_oop(q)->is_gc_marked()) {
// mark is pointer to next marked oop
debug_only(prev_q = q);
- q = (HeapWord*) oop(q)->mark()->decode_pointer();
+ q = (HeapWord*) space->make_oop(q)->mark()->decode_pointer();
assert(q > prev_q, "we should be moving forward through memory");
} else {
// prefetch beyond q
Prefetch::read(q, scan_interval);
// size and destination
size_t size = space->obj_size(q);
- HeapWord* compaction_top = (HeapWord*)oop(q)->forwardee();
+ HeapWord* compaction_top = (HeapWord*)space->make_oop(q)->forwardee();
// prefetch beyond compaction_top
Prefetch::write(compaction_top, copy_interval);
// copy object and reinit its mark
assert(q != compaction_top, "everything in this pass should be moving");
- Copy::aligned_conjoint_words(q, compaction_top, size);
+ Copy::aligned_conjoint_words((HeapWord*) space->make_oop(q), compaction_top, size);
oop(compaction_top)->init_mark();
assert(oop(compaction_top)->klass() != NULL, "should have a class");
debug_only(prev_q = q);
q += size;
< prev index next >