< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp
Print this page
rev 50076 : Fold Partial GC into Traversal GC
*** 22,35 ****
--- 22,37 ----
*/
#include "precompiled.hpp"
#include "memory/allocation.hpp"
#include "gc/shenandoah/brooksPointer.hpp"
+ #include "gc/shenandoah/shenandoahHeapRegionSet.inline.hpp"
#include "gc/shenandoah/shenandoahConnectionMatrix.hpp"
#include "gc/shenandoah/shenandoahHeap.hpp"
#include "gc/shenandoah/shenandoahHeap.inline.hpp"
#include "gc/shenandoah/shenandoahHeapRegion.hpp"
+ #include "gc/shenandoah/shenandoahTraversalGC.hpp"
#include "gc/shared/space.inline.hpp"
#include "memory/universe.hpp"
#include "oops/oop.inline.hpp"
#include "runtime/java.hpp"
#include "runtime/mutexLocker.hpp"
*** 57,67 ****
_live_data(0),
_tlab_allocs(0),
_gclab_allocs(0),
_shared_allocs(0),
_reserved(MemRegion(start, size_words)),
- _root(false),
_new_top(NULL),
_seqnum_first_alloc_mutator(0),
_seqnum_last_alloc_mutator(0),
_seqnum_first_alloc_gc(0),
_seqnum_last_alloc_gc(0),
--- 59,68 ----
*** 433,443 ****
st->print("|U %3d%%", (int) ((double) used() * 100 / capacity()));
st->print("|T %3d%%", (int) ((double) get_tlab_allocs() * 100 / capacity()));
st->print("|G %3d%%", (int) ((double) get_gclab_allocs() * 100 / capacity()));
st->print("|S %3d%%", (int) ((double) get_shared_allocs() * 100 / capacity()));
st->print("|L %3d%%", (int) ((double) get_live_data_bytes() * 100 / capacity()));
! if (is_root()) {
st->print("|R");
} else {
st->print("| ");
}
st->print("|CP " SIZE_FORMAT_W(3), _critical_pins);
--- 434,444 ----
st->print("|U %3d%%", (int) ((double) used() * 100 / capacity()));
st->print("|T %3d%%", (int) ((double) get_tlab_allocs() * 100 / capacity()));
st->print("|G %3d%%", (int) ((double) get_gclab_allocs() * 100 / capacity()));
st->print("|S %3d%%", (int) ((double) get_shared_allocs() * 100 / capacity()));
st->print("|L %3d%%", (int) ((double) get_live_data_bytes() * 100 / capacity()));
! if (_heap->traversal_gc() != NULL && _heap->traversal_gc()->root_regions()->is_in(region_number())) {
st->print("|R");
} else {
st->print("| ");
}
st->print("|CP " SIZE_FORMAT_W(3), _critical_pins);
*** 503,522 ****
ContiguousSpace::clear(false);
if (ZapUnusedHeapArea) {
ContiguousSpace::mangle_unused_area_complete();
}
clear_live_data();
- _root = false;
reset_alloc_metadata();
// Reset C-TAMS pointer to ensure size-based iteration, everything
// in that regions is going to be new objects.
! _heap->set_complete_top_at_mark_start(bottom(), bottom());
// We can only safely reset the C-TAMS pointer if the bitmap is clear for that region.
assert(_heap->is_complete_bitmap_clear_range(bottom(), end()), "must be clear");
if (UseShenandoahMatrix) {
_heap->connection_matrix()->clear_region(region_number());
}
make_empty();
--- 504,534 ----
ContiguousSpace::clear(false);
if (ZapUnusedHeapArea) {
ContiguousSpace::mangle_unused_area_complete();
}
clear_live_data();
reset_alloc_metadata();
// Reset C-TAMS pointer to ensure size-based iteration, everything
// in that regions is going to be new objects.
! if (ShenandoahRecycleClearsBitmap && !_heap->is_full_gc_in_progress()) {
! HeapWord* r_bottom = bottom();
! HeapWord* top = _heap->complete_top_at_mark_start(r_bottom);
! if (top > r_bottom) {
! _heap->complete_mark_bit_map()->clear_range_large(MemRegion(r_bottom, top));
! }
!
! assert(_heap->is_next_bitmap_clear_range(bottom(), end()), "must be clear");
! _heap->set_next_top_at_mark_start(bottom(), bottom());
! }
!
// We can only safely reset the C-TAMS pointer if the bitmap is clear for that region.
assert(_heap->is_complete_bitmap_clear_range(bottom(), end()), "must be clear");
+ _heap->set_complete_top_at_mark_start(bottom(), bottom());
+
if (UseShenandoahMatrix) {
_heap->connection_matrix()->clear_region(region_number());
}
make_empty();
< prev index next >