Mercurial > hg > shenandoah-preopenjdk-archive > openjdk8 > hotspot
changeset 7462:c0734957b505
Relaim all-garbage region as early as possible.
author | Roman Kennke <rkennke@redhat.com> |
---|---|
date | Wed, 11 Feb 2015 23:42:55 +0100 |
parents | 019d45744873 |
children | 7c17c9b67762 |
files | src/share/vm/gc_implementation/shenandoah/shenandoahHeap.cpp src/share/vm/gc_implementation/shenandoah/shenandoahHeapRegionSet.cpp |
diffstat | 2 files changed, 13 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/shenandoah/shenandoahHeap.cpp Wed Feb 11 18:05:46 2015 +0100 +++ b/src/share/vm/gc_implementation/shenandoah/shenandoahHeap.cpp Wed Feb 11 23:42:55 2015 +0100 @@ -786,9 +786,7 @@ void ShenandoahHeap::parallel_evacuate_region(ShenandoahHeapRegion* from_region) { - if (from_region->getLiveData() == 0) { - return; - } + assert(from_region->getLiveData() > 0, "all-garbage regions are reclaimed earlier"); ParallelEvacuateRegionObjectClosure evacuate_region(this); @@ -836,10 +834,9 @@ from_hr->print(); } - // Not sure if the check is worth it or not. - if (from_hr->getLiveData() != 0) { - _sh->parallel_evacuate_region(from_hr); - } + assert(from_hr->getLiveData() > 0, "all-garbage regions are reclaimed early"); + _sh->parallel_evacuate_region(from_hr); + if (_sh->cancelled_evacuation()) { break; }
--- a/src/share/vm/gc_implementation/shenandoah/shenandoahHeapRegionSet.cpp Wed Feb 11 18:05:46 2015 +0100 +++ b/src/share/vm/gc_implementation/shenandoah/shenandoahHeapRegionSet.cpp Wed Feb 11 23:42:55 2015 +0100 @@ -167,8 +167,15 @@ if (region->garbage() > _garbage_threshold && ! region->is_humonguous()) { assert(! region->is_humonguous(), "no humonguous regions in collection set"); - append(region); - region->set_is_in_collection_set(true); + + if (region->getLiveData() == 0) { + // We can recycle it right away and put it in the free set. + tty->print_cr("recycling all garbage region early"); + region->recycle(); + } else { + append(region); + region->set_is_in_collection_set(true); + } } r++; }