mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 23:04:50 +02:00
6672698: mangle_unused_area() should not remangle the entire heap at each collection
Maintain a high water mark for the allocations in a space and mangle only up to that high water mark. Reviewed-by: ysr, apetrusenko
This commit is contained in:
parent
0d9452401c
commit
18dbebd143
43 changed files with 1299 additions and 206 deletions
|
@ -98,6 +98,9 @@ void PSMarkSweep::invoke_no_policy(bool clear_all_softrefs) {
|
|||
// Increment the invocation count
|
||||
heap->increment_total_collections(true /* full */);
|
||||
|
||||
// Save information needed to minimize mangling
|
||||
heap->record_gen_tops_before_GC();
|
||||
|
||||
// We need to track unique mark sweep invocations as well.
|
||||
_total_invocations++;
|
||||
|
||||
|
@ -188,6 +191,12 @@ void PSMarkSweep::invoke_no_policy(bool clear_all_softrefs) {
|
|||
|
||||
deallocate_stacks();
|
||||
|
||||
if (ZapUnusedHeapArea) {
|
||||
// Do a complete mangle (top to end) because the usage for
|
||||
// scratch does not maintain a top pointer.
|
||||
young_gen->to_space()->mangle_unused_area_complete();
|
||||
}
|
||||
|
||||
eden_empty = young_gen->eden_space()->is_empty();
|
||||
if (!eden_empty) {
|
||||
eden_empty = absorb_live_data_from_eden(size_policy, young_gen, old_gen);
|
||||
|
@ -198,7 +207,7 @@ void PSMarkSweep::invoke_no_policy(bool clear_all_softrefs) {
|
|||
Universe::update_heap_info_at_gc();
|
||||
|
||||
survivors_empty = young_gen->from_space()->is_empty() &&
|
||||
young_gen->to_space()->is_empty();
|
||||
young_gen->to_space()->is_empty();
|
||||
young_gen_empty = eden_empty && survivors_empty;
|
||||
|
||||
BarrierSet* bs = heap->barrier_set();
|
||||
|
@ -344,6 +353,11 @@ void PSMarkSweep::invoke_no_policy(bool clear_all_softrefs) {
|
|||
perm_gen->verify_object_start_array();
|
||||
}
|
||||
|
||||
if (ZapUnusedHeapArea) {
|
||||
old_gen->object_space()->check_mangled_unused_area_complete();
|
||||
perm_gen->object_space()->check_mangled_unused_area_complete();
|
||||
}
|
||||
|
||||
NOT_PRODUCT(ref_processor()->verify_no_references_recorded());
|
||||
|
||||
if (PrintHeapAtGC) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue