< prev index next >
src/share/vm/gc/g1/g1CollectorPolicy.cpp
Print this page
rev 9312 : imported patch 8136678-implement-adaptive-sizing-algorithm-for-IHOP
@@ -1243,12 +1243,29 @@
_collectionSetChooser->verify();
}
G1IHOPControl* G1CollectorPolicy::create_ihop_control() const {
+ if (G1UseAdaptiveIHOP) {
+ // The target occupancy is the total heap occupancy we want to hit. First, we
+ // want to avoid eating into the reserve intended for young GC (to avoid unnecessary
+ // throughput loss). Additionally G1 is free to not clean out up to
+ // G1HeapWastePercent of heap, that space also cannot be used for allocation
+ // while marking.
+ size_t safe_heap_percentage = (size_t) (G1ReservePercent + G1HeapWastePercent);
+ size_t target_occupancy = 0;
+
+ if (safe_heap_percentage < 100) {
+ target_occupancy = G1CollectedHeap::heap()->max_capacity() * (100.0 - safe_heap_percentage) / 100.0;
+ }
+ return new G1AdaptiveIHOPControl(InitiatingHeapOccupancyPercent,
+ target_occupancy,
+ &_predictor);
+ } else {
return new G1StaticIHOPControl(InitiatingHeapOccupancyPercent,
G1CollectedHeap::heap()->max_capacity());
+ }
}
void G1CollectorPolicy::update_ihop_statistics(double marking_time,
double mutator_time_s,
size_t mutator_alloc_bytes,
< prev index next >