< prev index next >
src/hotspot/share/gc/parallel/psParallelCompact.cpp
Print this page
*** 1113,1144 ****
const double cur_density = double(space_live) / space_capacity;
const double deadwood_density =
(1.0 - cur_density) * (1.0 - cur_density) * cur_density * cur_density;
const size_t deadwood_goal = size_t(space_capacity * deadwood_density);
! if (TraceParallelOldGCDensePrefix) {
! tty->print_cr("cur_dens=%5.3f dw_dens=%5.3f dw_goal=" SIZE_FORMAT,
cur_density, deadwood_density, deadwood_goal);
! tty->print_cr("space_live=" SIZE_FORMAT " " "space_used=" SIZE_FORMAT " "
"space_cap=" SIZE_FORMAT,
space_live, space_used,
space_capacity);
- }
// XXX - Use binary search?
HeapWord* dense_prefix = sd.region_to_addr(cp);
const RegionData* full_cp = cp;
const RegionData* const top_cp = sd.addr_to_region_ptr(space->top() - 1);
while (cp < end_cp) {
HeapWord* region_destination = cp->destination();
const size_t cur_deadwood = pointer_delta(dense_prefix, region_destination);
! if (TraceParallelOldGCDensePrefix && Verbose) {
! tty->print_cr("c#=" SIZE_FORMAT_W(4) " dst=" PTR_FORMAT " "
! "dp=" PTR_FORMAT " " "cdw=" SIZE_FORMAT_W(8),
sd.region(cp), p2i(region_destination),
p2i(dense_prefix), cur_deadwood);
- }
if (cur_deadwood >= deadwood_goal) {
// Found the region that has the correct amount of deadwood to the left.
// This typically occurs after crossing a fairly sparse set of regions, so
// iterate backwards over those sparse regions, looking for the region
--- 1113,1144 ----
const double cur_density = double(space_live) / space_capacity;
const double deadwood_density =
(1.0 - cur_density) * (1.0 - cur_density) * cur_density * cur_density;
const size_t deadwood_goal = size_t(space_capacity * deadwood_density);
! log_develop_debug(gc, compaction)(
! "cur_dens=%5.3f dw_dens=%5.3f dw_goal=" SIZE_FORMAT,
cur_density, deadwood_density, deadwood_goal);
! log_develop_debug(gc, compaction)(
! "space_live=" SIZE_FORMAT " space_used=" SIZE_FORMAT " "
"space_cap=" SIZE_FORMAT,
space_live, space_used,
space_capacity);
// XXX - Use binary search?
HeapWord* dense_prefix = sd.region_to_addr(cp);
const RegionData* full_cp = cp;
const RegionData* const top_cp = sd.addr_to_region_ptr(space->top() - 1);
while (cp < end_cp) {
HeapWord* region_destination = cp->destination();
const size_t cur_deadwood = pointer_delta(dense_prefix, region_destination);
!
! log_develop_trace(gc, compaction)(
! "c#=" SIZE_FORMAT_W(4) " dst=" PTR_FORMAT " "
! "dp=" PTR_FORMAT " cdw=" SIZE_FORMAT_W(8),
sd.region(cp), p2i(region_destination),
p2i(dense_prefix), cur_deadwood);
if (cur_deadwood >= deadwood_goal) {
// Found the region that has the correct amount of deadwood to the left.
// This typically occurs after crossing a fairly sparse set of regions, so
// iterate backwards over those sparse regions, looking for the region
*** 1156,1170 ****
double prev_region_density_to_right =
double(prev_region_live_to_right) / prev_region_space_to_right;
if (density_to_right <= prev_region_density_to_right) {
return dense_prefix;
}
! if (TraceParallelOldGCDensePrefix && Verbose) {
! tty->print_cr("backing up from c=" SIZE_FORMAT_W(4) " d2r=%10.8f "
! "pc_d2r=%10.8f", sd.region(cp), density_to_right,
prev_region_density_to_right);
! }
dense_prefix -= region_size;
live_to_right = prev_region_live_to_right;
space_to_right = prev_region_space_to_right;
density_to_right = prev_region_density_to_right;
}
--- 1156,1172 ----
double prev_region_density_to_right =
double(prev_region_live_to_right) / prev_region_space_to_right;
if (density_to_right <= prev_region_density_to_right) {
return dense_prefix;
}
!
! log_develop_trace(gc, compaction)(
! "backing up from c=" SIZE_FORMAT_W(4) " d2r=%10.8f "
! "pc_d2r=%10.8f",
! sd.region(cp), density_to_right,
prev_region_density_to_right);
!
dense_prefix -= region_size;
live_to_right = prev_region_live_to_right;
space_to_right = prev_region_space_to_right;
density_to_right = prev_region_density_to_right;
}
*** 1194,1208 ****
const size_t space_cap = space->capacity_in_words();
const double dead_to_left_pct = double(dead_to_left) / space_cap;
const size_t live_to_right = new_top - cp->destination();
const size_t dead_to_right = space->top() - addr - live_to_right;
! tty->print_cr("%s=" PTR_FORMAT " dpc=" SIZE_FORMAT_W(5) " "
"spl=" SIZE_FORMAT " "
"d2l=" SIZE_FORMAT " d2l%%=%6.4f "
! "d2r=" SIZE_FORMAT " l2r=" SIZE_FORMAT
! " ratio=%10.8f",
algorithm, p2i(addr), region_idx,
space_live,
dead_to_left, dead_to_left_pct,
dead_to_right, live_to_right,
double(dead_to_right) / live_to_right);
--- 1196,1211 ----
const size_t space_cap = space->capacity_in_words();
const double dead_to_left_pct = double(dead_to_left) / space_cap;
const size_t live_to_right = new_top - cp->destination();
const size_t dead_to_right = space->top() - addr - live_to_right;
! log_develop_debug(gc, compaction)(
! "%s=" PTR_FORMAT " dpc=" SIZE_FORMAT_W(5) " "
"spl=" SIZE_FORMAT " "
"d2l=" SIZE_FORMAT " d2l%%=%6.4f "
! "d2r=" SIZE_FORMAT " l2r=" SIZE_FORMAT " "
! "ratio=%10.8f",
algorithm, p2i(addr), region_idx,
space_live,
dead_to_left, dead_to_left_pct,
dead_to_right, live_to_right,
double(dead_to_right) / live_to_right);
*** 1411,1430 ****
const double limiter = dead_wood_limiter(density, min_percent_free);
const size_t dead_wood_max = space_used - space_live;
const size_t dead_wood_limit = MIN2(size_t(space_capacity * limiter),
dead_wood_max);
! if (TraceParallelOldGCDensePrefix) {
! tty->print_cr("space_live=" SIZE_FORMAT " " "space_used=" SIZE_FORMAT " "
"space_cap=" SIZE_FORMAT,
space_live, space_used,
space_capacity);
! tty->print_cr("dead_wood_limiter(%6.4f, " SIZE_FORMAT ")=%6.4f "
"dead_wood_max=" SIZE_FORMAT " dead_wood_limit=" SIZE_FORMAT,
density, min_percent_free, limiter,
dead_wood_max, dead_wood_limit);
- }
// Locate the region with the desired amount of dead space to the left.
const RegionData* const limit_cp =
dead_wood_limit_region(full_cp, top_cp, dead_wood_limit);
--- 1414,1433 ----
const double limiter = dead_wood_limiter(density, min_percent_free);
const size_t dead_wood_max = space_used - space_live;
const size_t dead_wood_limit = MIN2(size_t(space_capacity * limiter),
dead_wood_max);
! log_develop_debug(gc, compaction)(
! "space_live=" SIZE_FORMAT " space_used=" SIZE_FORMAT " "
"space_cap=" SIZE_FORMAT,
space_live, space_used,
space_capacity);
! log_develop_debug(gc, compaction)(
! "dead_wood_limiter(%6.4f, " SIZE_FORMAT ")=%6.4f "
"dead_wood_max=" SIZE_FORMAT " dead_wood_limit=" SIZE_FORMAT,
density, min_percent_free, limiter,
dead_wood_max, dead_wood_limit);
// Locate the region with the desired amount of dead space to the left.
const RegionData* const limit_cp =
dead_wood_limit_region(full_cp, top_cp, dead_wood_limit);
*** 1534,1544 ****
if (_space_info[id].new_top() != space->bottom()) {
HeapWord* dense_prefix_end = compute_dense_prefix(id, maximum_compaction);
_space_info[id].set_dense_prefix(dense_prefix_end);
#ifndef PRODUCT
! if (TraceParallelOldGCDensePrefix) {
print_dense_prefix_stats("ratio", id, maximum_compaction,
dense_prefix_end);
HeapWord* addr = compute_dense_prefix_via_density(id, maximum_compaction);
print_dense_prefix_stats("density", id, maximum_compaction, addr);
}
--- 1537,1547 ----
if (_space_info[id].new_top() != space->bottom()) {
HeapWord* dense_prefix_end = compute_dense_prefix(id, maximum_compaction);
_space_info[id].set_dense_prefix(dense_prefix_end);
#ifndef PRODUCT
! if (log_is_enabled(Debug, gc, compaction)) {
print_dense_prefix_stats("ratio", id, maximum_compaction,
dense_prefix_end);
HeapWord* addr = compute_dense_prefix_via_density(id, maximum_compaction);
print_dense_prefix_stats("density", id, maximum_compaction, addr);
}
*** 1608,1627 ****
void PSParallelCompact::summary_phase(ParCompactionManager* cm,
bool maximum_compaction)
{
GCTraceTime(Info, gc, phases) tm("Summary Phase", &_gc_timer);
! #ifdef ASSERT
! if (TraceParallelOldGCMarkingPhase) {
! tty->print_cr("add_obj_count=" SIZE_FORMAT " "
"add_obj_bytes=" SIZE_FORMAT,
! add_obj_count, add_obj_size * HeapWordSize);
! tty->print_cr("mark_bitmap_count=" SIZE_FORMAT " "
"mark_bitmap_bytes=" SIZE_FORMAT,
! mark_bitmap_count, mark_bitmap_size * HeapWordSize);
! }
! #endif // #ifdef ASSERT
// Quick summarization of each space into itself, to see how much is live.
summarize_spaces_quick();
log_develop_trace(gc, compaction)("summary phase: after summarizing each space to self");
--- 1611,1630 ----
void PSParallelCompact::summary_phase(ParCompactionManager* cm,
bool maximum_compaction)
{
GCTraceTime(Info, gc, phases) tm("Summary Phase", &_gc_timer);
! log_develop_debug(gc, marking)(
! "add_obj_count=" SIZE_FORMAT " "
"add_obj_bytes=" SIZE_FORMAT,
! add_obj_count,
! add_obj_size * HeapWordSize);
! log_develop_debug(gc, marking)(
! "mark_bitmap_count=" SIZE_FORMAT " "
"mark_bitmap_bytes=" SIZE_FORMAT,
! mark_bitmap_count,
! mark_bitmap_size * HeapWordSize);
// Quick summarization of each space into itself, to see how much is live.
summarize_spaces_quick();
log_develop_trace(gc, compaction)("summary phase: after summarizing each space to self");
< prev index next >