mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 14:24:46 +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
|
@ -1058,6 +1058,10 @@ void PSParallelCompact::post_compact()
|
|||
|
||||
ref_processor()->enqueue_discovered_references(NULL);
|
||||
|
||||
if (ZapUnusedHeapArea) {
|
||||
heap->gen_mangle_unused_area();
|
||||
}
|
||||
|
||||
// Update time of last GC
|
||||
reset_millis_since_last_gc();
|
||||
}
|
||||
|
@ -1959,6 +1963,11 @@ void PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) {
|
|||
PSPermGen* perm_gen = heap->perm_gen();
|
||||
PSAdaptiveSizePolicy* size_policy = heap->size_policy();
|
||||
|
||||
if (ZapUnusedHeapArea) {
|
||||
// Save information needed to minimize mangling
|
||||
heap->record_gen_tops_before_GC();
|
||||
}
|
||||
|
||||
_print_phases = PrintGCDetails && PrintParallelOldGCPhaseTimes;
|
||||
|
||||
// Make sure data structures are sane, make the heap parsable, and do other
|
||||
|
@ -2127,17 +2136,19 @@ void PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) {
|
|||
size_t max_eden_size = young_gen->max_size() -
|
||||
young_gen->from_space()->capacity_in_bytes() -
|
||||
young_gen->to_space()->capacity_in_bytes();
|
||||
size_policy->compute_generation_free_space(young_gen->used_in_bytes(),
|
||||
young_gen->eden_space()->used_in_bytes(),
|
||||
old_gen->used_in_bytes(),
|
||||
perm_gen->used_in_bytes(),
|
||||
young_gen->eden_space()->capacity_in_bytes(),
|
||||
old_gen->max_gen_size(),
|
||||
max_eden_size,
|
||||
true /* full gc*/,
|
||||
gc_cause);
|
||||
size_policy->compute_generation_free_space(
|
||||
young_gen->used_in_bytes(),
|
||||
young_gen->eden_space()->used_in_bytes(),
|
||||
old_gen->used_in_bytes(),
|
||||
perm_gen->used_in_bytes(),
|
||||
young_gen->eden_space()->capacity_in_bytes(),
|
||||
old_gen->max_gen_size(),
|
||||
max_eden_size,
|
||||
true /* full gc*/,
|
||||
gc_cause);
|
||||
|
||||
heap->resize_old_gen(size_policy->calculated_old_free_size_in_bytes());
|
||||
heap->resize_old_gen(
|
||||
size_policy->calculated_old_free_size_in_bytes());
|
||||
|
||||
// Don't resize the young generation at an major collection. A
|
||||
// desired young generation size may have been calculated but
|
||||
|
@ -2210,6 +2221,11 @@ void PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) {
|
|||
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());
|
||||
|
||||
collection_exit.update();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue